我试图在每 1 秒后刷新标签图像我创建了一个类,其中只有一次我会点击按钮显示图像,之后,它将在每秒刷新一次,但无法完成这项工作
早些时候我试图让它与画布一起工作,但它并没有通过标签显示它来帮助我,但能够使用刷新
self.canvas.after(100, self.loopCap)
但现在在标签小部件中,我无法理解每次如何刷新标签
代码如下:
import tkinter as tk
from PIL import ImageTk, Image
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(StartPage)
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class StartPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, bg='powder blue')
self.master.geometry('700x500+0+0')
self.master.config(bg='powder blue')
self.username = tk.StringVar()
self.password = tk.StringVar()
tk.Label(self, text='Sealant Login System', font=('arial', 30, 'bold'), bg='powder blue',
fg='black').pack(side="top", fill="x", pady=10,anchor='n')
# =====================================================================================================
tk.Label(self, text="UserID: ", bg='powder blue').pack(side="left", fill="x", pady=5)
tk.Entry(self, font=('arial', 15, 'bold'), textvariable=self.username).pack(side="left", fill="x", pady=5, expand=1)
tk.Label(self, text="Password: ", bg='powder blue').pack(side="left", fill="x", pady=5)
tk.Entry(self, font=('arial', 15, 'bold'), textvariable=self.password).pack(side="left", fill="x", pady=5)
tk.Button(self, text="Login",bg='cadet blue',
command=self.Login_System).pack(side="top",fill="y")
tk.Button(self, text="Reset",bg='cadet blue',
command=self.Rest).pack(side="bottom",fill="y")
def Login_System(self):
u = (self.username.get())
p = (self.password.get())
if (u == str("admin") and p == str("admin")):
self.master.switch_frame(PageOne)
def Rest(self):
self.username.set("")
self.password.set("")
self.master.focus()
class PageOne(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, bg='powder blue')
tk.Label(self, text='Sealant Reference System', font=('arial', 30, 'bold'), bg='powder blue',
fg='black').pack(side="top", fill="x", pady=10, anchor='n')
tk.Label(self, text="Accuracy: ", bg='powder blue').pack(side="left", fill="x", pady=10, anchor='n')
tk.Label(self, text="Variable", bg='powder blue').pack(side="left", fill="x", pady=10, anchor='n')
tk.Label(self, text="No of Jobs: ", bg='powder blue').pack(side="left", fill="x", pady=10, anchor='n')
tk.Label(self, text="Variable", bg='powder blue').pack(side="left", fill="x", pady=10, anchor='n')
tk.Button(self, text="Return to start page",
command= lambda: master.switch_frame(PageTwo)).pack(side="bottom")
class PageTwo(tk.Frame):
def loopCap(self):
# self.label = Label(self.master, image=self.img, textvariable=self.text)
self.img = Image.open("img.jpg")
self.label = ImageTk.PhotoImage(self.img)
tk.Label(self, image=self.label).pack()
print("updated")
self.master.after(1000, self.loopCap)
def __init__(self, master):
tk.Frame.__init__(self, master,bg='powder blue')
self.master.geometry('1350x750+0+0')
self.master.config(bg='powder blue')
tk.Button(self, text="Return to start page",
command=self.loopCap).pack()
# self.canvas.scale(master, from_=0, to=42, tickinterval=8)
print("Load")
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
建议将不胜感激
在里面loopCap
你必须跑after()
def loopCap(self):
# ... code ...
self.master.after(1000, self.loopCap) # 1000ms = 1s
它会一次又一次地重复功能。
您可以使用此方法更改Label
或Canvas
。没有区别。
如果您想使用两个按钮停止并再次启动它,那么您可以使用变量True/False
- 即。self.repeate
- 停止after()
def __init__(self, master):
self.repeate = False
tk.Button(self, text="Start", command=self.on_start)
tk.Button(self, text="Stop", command=self.on_stop)
def loopCap(self):
# ... code ...
if self.repeate:
self.after(1000, self.loopCap)
def on_start(self):
if self.repeated:
print('already running')
else:
print('starting')
self.repeated = True
self.loopCap()
def on_stop(self):
if self.repeated:
print('stoping')
self.repeated = False
else:
print('not running')
编辑:您必须在开始时创建标签,然后仅更改标签中的图像。为此,您需要两个或更多图像。
import tkinter as tk
from PIL import ImageTk, Image
class SampleApp(tk.Tk):
def __init__(self):
super().__init__()
self._frame = None
self.switch_frame(PageTwo)
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class PageTwo(tk.Frame):
def loopCap(self):
self.current_photo += 1
if self.current_photo >= len(self.photo):
self.current_photo = 0
self.label['image'] = self.photo[self.current_photo]
print("updated")
self.master.after(1000, self.loopCap)
def __init__(self, master):
super().__init__(master, bg='powder blue')
self.master.geometry('1350x750+0+0')
self.master.config(bg='powder blue')
b = tk.Button(self, text="Start", command=self.loopCap)
b.pack()
self.img = [
Image.open("image1.jpg"),
Image.open("image2.jpg"),
Image.open("image3.jpg"),
]
self.photo = [
ImageTk.PhotoImage(self.img[0]),
ImageTk.PhotoImage(self.img[1]),
ImageTk.PhotoImage(self.img[2]),
]
self.current_photo = 1
self.label = tk.Label(self)
self.label.pack()
print("Load")
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
编辑:对于始终从文件加载的单个图像
class PageTwo(tk.Frame):
def loopCap(self):
self.img = Image.open("image.jpg")
self.photo = ImageTk.PhotoImage(self.img)
self.label['image'] = self.photo
print("updated")
self.master.after(1000, self.loopCap)
def __init__(self, master):
super().__init__(master, bg='powder blue')
self.master.geometry('1350x750+0+0')
self.master.config(bg='powder blue')
b = tk.Button(self, text="Start", command=self.loopCap)
b.pack()
self.label = tk.Label(self)
self.label.pack()
print("Load")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句