如何避免在无限循环 运行 时阻塞 tkinter GUI?
How to Avoid Blocking tkinter GUI while an infinite loop is running?
我编写了以下程序来根据一天中的时间更改屏幕亮度。它使用无限循环不断检查时间,但这也阻止了用户更改 tkinter window 中的值或关闭它。有什么办法可以避免这种情况吗?
from datetime import datetime
import screen_brightness_control as sbc
from tkinter import *
m=Tk()
m.title('Brightness Control')
def saver():
print("Saving")
global brit
brit=e3.get()
global frot
frot=e1.get()
global tot
tot=e2.get()
a=True
while a==True:
current_brightness=sbc.get_brightness()
now=datetime.now().time()
if now.hour>int(frot) and now.hour<int(tot) :
sbc.set_brightness(brit)
else:
sbc.set_brightness(40)
Label(m, text='Brightness').grid(row=0,column=0)
Label(m, text='From').grid(row=1,column=0)
Label(m, text='To').grid(row=1,column=2)
e1 = Entry(m)
e2 = Entry(m)
e3 = Entry(m)
e1.grid(row=1, column=1)
e2.grid(row=1, column=3)
e3.grid(row=0, column=1)
button = Button(m, text='Save', width=5,command=saver)
button.grid(row=2,column=3)
m.mainloop()
您必须像这样在 while
循环中的任意位置添加 <tk.Tk object>.update()
:
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="This is a button")
button.pack()
while True:
root.update()
root.update()
更新 tcl 并停止“程序未响应”消息。
我编写了以下程序来根据一天中的时间更改屏幕亮度。它使用无限循环不断检查时间,但这也阻止了用户更改 tkinter window 中的值或关闭它。有什么办法可以避免这种情况吗?
from datetime import datetime
import screen_brightness_control as sbc
from tkinter import *
m=Tk()
m.title('Brightness Control')
def saver():
print("Saving")
global brit
brit=e3.get()
global frot
frot=e1.get()
global tot
tot=e2.get()
a=True
while a==True:
current_brightness=sbc.get_brightness()
now=datetime.now().time()
if now.hour>int(frot) and now.hour<int(tot) :
sbc.set_brightness(brit)
else:
sbc.set_brightness(40)
Label(m, text='Brightness').grid(row=0,column=0)
Label(m, text='From').grid(row=1,column=0)
Label(m, text='To').grid(row=1,column=2)
e1 = Entry(m)
e2 = Entry(m)
e3 = Entry(m)
e1.grid(row=1, column=1)
e2.grid(row=1, column=3)
e3.grid(row=0, column=1)
button = Button(m, text='Save', width=5,command=saver)
button.grid(row=2,column=3)
m.mainloop()
您必须像这样在 while
循环中的任意位置添加 <tk.Tk object>.update()
:
import tkinter as tk
root = tk.Tk()
button = tk.Button(root, text="This is a button")
button.pack()
while True:
root.update()
root.update()
更新 tcl 并停止“程序未响应”消息。