我制作了一个包含无限循环的代码,并制作了一个带有开始按钮的Tkinter接口。
当我点击按钮时,Windows认为GUI已经崩溃 - 即使它在后台工作 - 并且按钮仍然被点击。
- 如何取消点击按钮?
- 当再次点击时,如何让同一个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库一起使用
答案 0 :(得分:1)
我在这里看到了几个问题:
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()
答案 1 :(得分:0)
这有效:
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()