如何在tkinter上使按钮运行循环功能?

时间:2018-12-05 19:08:06

标签: python python-3.x loops tkinter

我在这里有一个特定的问题:我有一个按钮,当按下该按钮时,它将运行一个基本上由循环组成的功能。

这是代码的简化版本:

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窗口再次响应?

1 个答案:

答案 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()