【发布时间】:2014-05-02 04:01:09
【问题描述】:
在我的程序中,我的 GUI 类中有一个方法,我想定期更新 GUI。下面是我的代码的简化版本。
from tkinter import *
from time import sleep
class GUI_Class:
def __init__(self, parent):
self.var = IntVar()
scale = Scale(parent, to = 1, variable = self.var)
scale.pack()
self.label = Label(parent, bg = "white")
self.label.pack()
button = Button(parent)
button.pack()
button.bind("<Button-1>",lambda event:self.change_colour())
def change_colour(self):
if self.var.get() == 1:
counter = 0
while self.var.get() == 1 and counter != 20:
self.label.configure(bg = "red")
self.label.update_idletasks()
sleep(0.5)
self.label.configure(bg = "blue")
self.label.update_idletasks()
sleep(0.5)
counter += 1
else:
self.label.configure(bg = "white")
root = Tk()
GUI = GUI_Class(root)
root.mainloop()
问题在于,当用于更改 GUI 的 while 循环正在运行时,程序在等待 while 循环结束时失去了所有功能。我查看了其他人问题的答案,所有答案都建议使用线程,但是在答案的示例中,它始终是另一个类在单独的线程中运行的方法。虽然我可以使用读取 GUI.label.configure(bg = "color) 的命令创建一个单独的类并在它自己的线程中运行它,但该程序用于说明类之间必须有最小交互的状态,因此有一个类的整个目的是更改在另一个类中创建的 GUI 的布局可能会降低我的成绩.我想知道是否有办法在一个单独的线程中运行一个方法到它所属的类,从而让我的 while 循环运行当 GUI 的其余部分仍在运行时,即当标签在蓝色和红色之间闪烁时用户可以将比例更改为 0,按下按钮并停止循环?
【问题讨论】:
标签: python tkinter tk python-multithreading