我在这里有一个特定的问题:我有一个按钮,当按下该按钮时,它将运行一个基本上由循环组成的功能。
这是代码的简化版本:
from tkinter import *
from tkinter import ttk
root = Tk()
def loop():
while True:
print("loop")
b = Button (root, text = "run", command = loop)
b.grid(row = 1, column = 1)
root.mainloop()
当然,循环运行良好。但是,程序一旦开始运行,便无法继续执行并再次执行mainloop()
。这意味着tkinter窗口无响应。在我的实际程序中,这使我无法退出循环并更改功能。
那么,如何更改代码以使tkinter窗口再次响应?
答案 0 :(得分:1)
您要在此处使用名为after()
的tkinter方法。
这里是一个实际的例子,我更改了按钮以切换跟踪变量以模拟循环的开始和停止。
下面的代码将首先检查按钮是否正在访问循环,然后基本上将其打开或关闭。然后,使用after
方法建立了一个循环来继续循环,直到再次按下按钮为止。
import tkinter as tk
def loop(toggle=False):
global tracking_var
if toggle:
if tracking_var:
tracking_var = False
else:
tracking_var = True
if tracking_var:
print("loop")
root.after(1000, loop)
root = tk.Tk()
tracking_var = False
tk.Button(root, text="run", command=lambda: loop(True)).pack()
root.mainloop()