[英]How to make two functions containing while loops run simultaneously with tkinter (ttk) button
[英]How can I make a button on tkinter run a function that loops?
我在這里有一個特定的問題:我有一個按鈕,按下該按鈕時,會運行一個基本上由循環組成的函數。
這是代碼的簡化版本:
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 窗口再次響應?
調用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.