我编写了一个包含无限循环的代码,并创建了一个带有start按钮的Tkinter界面。
当我点击按钮时,窗口认为图形用户界面已经崩溃-even,因为它是在后台工作-,并且按钮仍然被点击。
-How是否要取消单击该按钮?
-and如何让相同的Tkinter窗口在再次单击时启动新的循环?使窗口保持响应。
示例代码:
import time
from tkinter import *
def do():
while x > 0:
try:
x = 1
x += 1
return x
except:
time.sleep(x)
x = 0
window = Tk()
Button(text='Start',width=30, command=do).grid(row=0, column=0)
mainloop()
在except
具有被认为发生的异常错误的情况下,
为了添加一些上下文,我将其与selenium库一起使用
发布于 2018-01-23 10:20:19
我在这里看到了几个问题:
1.) do()
前面没有def
。
2.) expect
应为except
3.)你的while
循环阻塞了你的程序流。相反,您应该使用Tk().after(wait_time, method)
说到这里,我假设你想要在按钮被按下后进行计数。
点击按钮后,从0开始计数。再次单击该按钮时,将停止打印count
并重置该按钮:
from tkinter import *
class App:
def __init__(self):
self.root = Tk()
self.count = 0
self.do_count = False
self.button = Button(self.root, text="Click me.", command=self.do)
self.button.pack()
self.root.mainloop()
def do(self):
self.do_count = not self.do_count
if not self.do_count:
self.count = 0
self.update()
def update(self):
if self.do_count:
print(self.count)
self.count += 1
self.root.after(1000, self.update)
app = App()
发布于 2018-01-23 11:37:12
这是可行的:
import threading
import time
from tkinter import *
def clicked():
threading.Thread(target=do).start()
def do():
while x > 0:
try:
x = 1
x += 1
return x
except:
time.sleep(x)
x = 0
window = Tk()
Button(text='Start',width=30, command=clicked).grid(row=0, column=0)
mainloop()
使用风险自负,因为它本身不会使您打破循环,将更新,如果我找到一个方法
编辑:
最简单的解决方案是创建守护线程,这有助于关闭您的代码如果您关闭了GUI,您可以通过编辑上述代码中的一行来完成此操作,如下所示:
threading.Thread(target=do, daemon=True).start()
https://stackoverflow.com/questions/48398991
复制