原标题:应用Tkinter模块制作一个图片播放器
今天,在看视频的同时,想了一下,既然视频、音乐都有自己的播放器,那么图片呢?是否有自己的播放器呢?既然没有,为什么不做一个呢?
1.了解Tkinter模块
Tkinter是Python比较常见的用来做图形界面的模块,自身不需要安装,并且容易使用。
今天我们要知道的它的几个组件:
Label组件:是用于在界面上输出描述的标签。
Button组件:是用于实现一个按钮,它的绝大多数选项跟Label组件是一样的。不过,Button组件有一个Label组件实现不了的功能,那就是可以接收用户的信息。Button组件有一个command选项,用于指定一个函数或方法,当用户单击按钮的时候,Tkinter就会自动地去调用这个函数或方法了。
Entry组件:是平时所说的输入框。输入框是程序打交道的一个途径,例如程序要求你输入账号密码,那么它就需要提供两个输入框给你,用于接收密码的输入框还会用星号将实际输入的内容隐藏起来。
Text组件:用于显示和处理多行文本,在Tkinter的所有组件中,Text组件显得异常强大和灵活,它适用于处理多种任务。
2.怎样实现播放下一张图片效果
代码如下:
import tkinter as tk
root=tk.Tk()
root.geometry("300x300")
photo=tk.PhotoImage(file='D:/QQ浏览器下载/2.gif')
text1=tk.Text(root)
text1.pack()
text1.image_create(tk.END,image=photo)
text1.update()
def delete():
text1.delete('0.0',tk.END)
text1.update()
button=tk.Button(root,text='按钮',command=delete)
button.pack()
root.mainloop()
tkinter上显示图片的格式必须是.gif 格式的,否则会报错,上面代码基本功能是通过按一个按钮实现图片被删除,这个时候我们只要在插入一张新的图片就可以显示出播放下一张图片的效果了。
注意:对于读者而言,想要运行一下上面程序,记得改动一下上面的图片的绝对路径。
3.最终代码
为了使图形界面显示更加美观,我这里使用了tkinter下面的configure()方法,把界面整体颜色设置为黑色。
import tkinter as tk
root=tk.Tk()
root.configure(background='black') # 设置图形界面的背景为黑色
root.mainloop()
这样整体颜色就变成了黑色了。
既然图形界面背景为黑色,那么显示的字体颜色就必须为白色。
我这里设置了图形界面的大小,这里的参数是根据我自己电脑屏幕大小来设置,不同人的电脑屏幕大小也许是不同,可以用QQ截图工具测试一下你的电脑屏幕大小喔!
root.geometry("1920x1040")
既然是图片播放器,那么怎么少得了死循环呢?不然,图片一下子就播放完毕了,只有通过死循环,这样就可以看上去有很多图片一样。
while True: # 一个死循环
for i in range(len(list_1)):
if fileName in list_1[i]: # 从第几张图片开始播放
for j in range(i,len(list_1)):
photo = tk.PhotoImage(file=list_1[j])
text1.image_create(tk.END, image=photo)
text1.update()
time.sleep(5)
text1.delete('1.0','1.end')
不过,图片尺寸还是必须有严格规定的,否则一些图片只能显示出部分区域。
要下载图片可以看我这篇博文喔:python多线程爬虫下载图片
既然tkinter要求显示的图片必须是 .gif格式,那么我们就把它转换成 .gif格式就行了。
from PIL import Image
import os
path=input('输入图片所在的文件夹:')
list_1=[path+'\\'+i for i in os.listdir(path=path)]
for file in list_1:
args=Image.open(file)
file1=file.replace(file[file.find('.'):],'.gif')
args.save(file1)
os.remove(path=file) # 删除不是 .gif格式的图片
既然改的是图片格式,那么这个文件夹下面就不能有 不是图片格式的文件,否则程序会出错。
3.1 代码:
import tkinter as tk
from tkinter import filedialog
import time
import os
root=tk.Tk()
root.geometry("1920x1040") # 图形界面的大小
root.title('-->图片播放器') # 标题
root.configure(background='black') # 设置图形界面的背景为黑色
label1=tk.Label(root,text='图片文件',bg='black',font=('楷体',13,'bold'),fg='white')
label1.grid(row=0,column=0)
v1=tk.StringVar()
entry1=tk.Entry(root,textvariable=v1,width=35)
entry1.grid(row=0,column=1,ipadx=40)
def callback():
fileName=filedialog.askopenfilename()
entry1.insert(tk.INSERT, fileName)
# print(fileName) # 开始播放的第一张图片
filepath=fileName[:fileName.rfind('/')]
# print(filepath) # 这张图片的文件夹
list_1=[filepath+'/{}'.format(i) for i in os.listdir(filepath)]
while True: # 一个死循环
for i in range(len(list_1)):
if fileName in list_1[i]: # 从第几张图片开始播放
for j in range(i,len(list_1)):
photo = tk.PhotoImage(file=list_1[j])
text1.image_create(tk.END, image=photo)
text1.update()
time.sleep(5)
text1.delete('1.0','1.end')
button1=tk.Button(root,text='浏览',bg='black',font=('楷体',13,'bold'),fg='white',command=callback)
button1.grid(row=0,column=2)
text1=tk.Text(root,width=210,height=55)
text1.grid(row=1,columnspan=3,padx=20)
root.mainloop()
运行结果:
20200415_091215.mp4
4.总结
代码是自己昨天和今天编写出来的,希望看了的读者能给我点一个小小的赞,我一定会更加努力,创造出更好的文章的。