tkLabel 中图片切换问题:
# 图片放置在右边
import tkinter as tk
from PIL import Image, ImageTk
path_1 = '1.jpg'
path_2 = '2.jpg'
img = Image.open(path)
img = ImageTk.PhotoImage(img)
imLabel = tk.Label(window, image=img) # 如果把.pack()直接放在这个后面会出现imLabel中没的返回对象,之后就无法切换图片了
imLabel.pack(side='right')
img_2 = Image.open(path_2)
img_2 = ImageTk.PhotoImage(img_2)
imLabel.config(image=img_2) # 只写这句不起作用,还要写下面这句,还不知道为什么
imLabel.image = img_2
所有控件回调函数带参数的写法:
在控件参数 command 中将回调函数写成 lambda 函数
tk.Button(window, text='上一张', font=('Arial', 12), width=6, height=1, command=lambda:call_back(one, two))
定时刷新功能问题:
window.after( time, func), 回调函数中必须调用自己,使自己这句话可以一直被运行,才能定时刷新,如果想关闭定时,回调函数要为其他函数,再调用自己所在函数,可以在回调函数中加入全局参数,使其调用时不再运行自己所在的函数。
def refresh_all(): # 只有运行这个函数才能定时,不运行就不定时了,所以要重写一个函数
global flag
window.after(1000, func=lambda:img_next(flag)) # 1000ms 刷新一次
def img_next(f):
"""根据flag来决定是开始下一张,还是暂停,还是重头开始"""
# print(f)
global flag
global imgNum
flag = f
if flag == "start":
imgNum +=1
if imgNum == imgLen:
imgNum = 0
tkinter.messagebox.showinfo(message='所有图片已播放完毕,您可以重新开始')
flag = 'restart'
all_chage()
# 每50ms更新一张图片
refresh_all()
elif flag == 'restart':
imgNum = 0
all_chage()