Ghi*_*ADJ 5 python user-interface tkinter
我有一个基本的python类,使用标准Tkinter库创建一个窗口:
import Tkinter
class GUI(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def lock_func(self):
while 1==1:
print "blah"
def initialize(self):
self.processBtn = Tkinter.Button(self, text="Process", command=self.lock_func)
self.processBtn.pack()
app = GUI(None)
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
当我按下Process按钮时,窗口没有响应.我希望能够在运行时关闭程序(使用x按钮)lock_func.
您可以使用生成器来保存循环内的状态,并使用yield将控制权交还给主循环。然后使用self.after重复调用生成器的next方法来模拟while True-- 但以对 Tkinter 主循环友好的方式进行。
import Tkinter as tk
class App(object):
def __init__(self, master):
self.master = master
self.initialize()
def lock_func(self):
def step():
while True:
print("blah")
self.nextstep_id = self.master.after(1, nextstep)
yield
nextstep = step().next
self.nextstep_id = self.master.after(1, nextstep)
def stop(self):
self.master.after_cancel(self.nextstep_id)
print("stopped")
def initialize(self):
self.nextstep_id = 0
self.process_button = tk.Button(self.master, text="Process",
command=self.lock_func)
self.stop_button = tk.Button(self.master, text="Stop",
command=self.stop)
self.process_button.pack()
self.stop_button.pack(expand='yes', fill='x')
root = tk.Tk()
app = App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |