我有一个带有两个按钮的tkinter接口,用于触发我的应用程序的两种模式,以及一个标签,显示它所处的模式。单击一个按钮时,调用的结果函数需要一段时间才能执行并返回。这导致我的鼠标光标旋转,按钮基本上被冻结"直到函数完成执行才能点击另一个按钮。
我想要的行为是我单击一个按钮,它以异步方式运行该函数(新线程)并使按钮再次可单击。如果单击另一个按钮,则会立即终止该第一个线程,并且新的函数/线程将异步启动。
我如何实现这一目标?
def alert_mode(var):
print("Entering Alert Mode")
var.set("Current mode: Alert")
// do stuff that takes a while to return
def capture_mode(var):
print("Entering Capture Mode")
var.set("Current mode: Capture")
// do stuff that takes a while to return
root = tk.Tk()
root.geometry('400x400')
var = StringVar()
var.set("Current mode: Alert")
text = tk.Label(root, text="Current mode: Alert", textvariable=var, fg="blue", font=("Arial", 18))
text.pack(pady=8)
b = tk.Button(root, text="Alert mode", height=10, width=15, font=("Arial",14), command=lambda: alert_mode(var))
b.pack()
b2 = tk.Button(root, text="Capture mode", height=10, width=15, font=("Arial",14), command=lambda: capture_mode(var))
b2.pack()
root.mainloop()
修改
好的,这是更新后的代码。我试图弄清楚如何启动和停止一个线程,但这并不像我想要的那样工作。我实际上并不希望两个线程同时运行。它是警报模式或捕获模式。关键是我不希望任何模式运行时GUI都冻结,以便用户可以随时切换到其他模式。
def alert_mode(var):
print("Entering Alert Mode")
var.set("Current mode: Alert")
// do stuff that takes a while to return
def capture_mode(var):
print("Entering Capture Mode")
var.set("Current mode: Capture")
// do stuff that takes a while to return
def start_alert_thread(var):
t = threading.Thread(target=alert_mode, args=(var,))
t.start()
t.join()
def start_capture_thread(var):
t2 = threading.Thread(target=alert_mode, args=(var,))
t2.start()
t2.join()
root = tk.Tk()
var = StringVar()
var.set("Current mode: Alert")
text = tk.Label(root, text="Current mode: Alert", textvariable=var, fg="blue", font=("Arial", 18))
text.pack(pady=8)
b = tk.Button(root, text="Alert mode", height=10, width=15, font=("Arial",14), command=lambda: start_alert_thread(var))
b.pack()
b2 = tk.Button(root, text="Capture mode", height=10, width=15, font=("Arial",14), command=lambda: start_capture_thread(var))
b2.pack()
root.mainloop()
答案 0 :(得分:1)
使用线程,
def threadButtonOne():
threading.Thread(target=buttonOne).start()
让按钮运行这样的功能。
onStop
答案 1 :(得分:0)
我对于这种情况有出路: 条件:使用python和tkinter运行selenium webdriver。从句柄转到python程序的位置按下播放按钮后,tkinter GUI窗口将变为“无响应”模式。但是python程序继续 注意:indent-只是一个占位符,就像缩进在python中很重要 解: 导入线程,tkinter等 def python_main(): indent- input(“输入用户数”)#依此类推。 indent- def python_sub():#并完成具有多种功能的程序
tkwindow = tk.Tk()
def mid(): 缩进= threading.Thread(target = python_main) indentth.start()
def tkinter_func(): indent- button = tk.Button(tkwindow,text =“ press me”,border = 0,command = mid) indent- button.place(x = 4,y = 4)
tkwindow.mainloop() 说明:无需等待。没有自动运行程序。