我使用tkinter编程了一个gui并实现了一个缩放栏来改变变量。 我试图在while循环中获得此scalebar的输出。 会发生什么:
我的代码卡住了,当我在while循环中时我无法更改比例尺,我不得不强制退出我的代码
我希望你有任何想法!代码示例如下,如果您需要更多或整个源代码,请告诉我
致以最诚挚的问候,
SevenDeath
class FunctionClassTest:
def __init__(self):
pass
def intimeSTOP(self):
self.Test = False
def intime(self):
self.test=True
while self.test:
self.TestTmp = scalebarTime.get()
if self.TestTmp < 0:
...
playsound
...
online = FunctionClassTest()
buttonC = Button(window, text="Test On", command=online.intime)
buttonD = Button(window, text="Test Off", command=online.intimeSTOP)
答案 0 :(得分:1)
问题是while循环。它与Tkinter循环冲突并有效地锁定GUI,同时连续执行循环,使GUI无响应。您必须轻松处理同时任务的一个选项是after
方法。这是一个例子:
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.timer = None # initalize timer variable
self.slide = Scale(self)
self.slide.pack()
Button(self, text='go', command=self._start).pack()
Button(self, text='stop', command=self._stop).pack()
def _start(self):
if self.slide.get() > 0:
# ... code here ... ie, print self.slide.get()
# set timer to after method, calling it every 1000ms
self.timer = self.after(1000, self._start)
def _stop(self):
if self.timer is not None:
# cancel timer, stopping the _start method from looping
self.after_cancel(self.timer)
root = Tk()
app = App(root)
app.pack()
root.mainloop()
有关after
方法的详情,请参阅:http://effbot.org/tkinterbook/widget.htm#Tkinter.Widget.after-method。