Tkinter-删除和设置小部件的边框
我试图在回调开始时删除文本小部件的边框,然后根据该回调其余部分的结果,如果某个变量具有某个值,我想将边框设置为红色 下面是我尝试过的,但是一旦边框设置为红色,它就永远不会在回调开始时被擦除Tkinter-删除和设置小部件的边框,tkinter,Tkinter,我试图在回调开始时删除文本小部件的边框,然后根据该回调其余部分的结果,如果某个变量具有某个值,我想将边框设置为红色 下面是我尝试过的,但是一旦边框设置为红色,它就永远不会在回调开始时被擦除 from tkinter import * import time class GUI: def __init__(self, master): self.cnt = 0; self.master = master self.test_butt
from tkinter import *
import time
class GUI:
def __init__(self, master):
self.cnt = 0;
self.master = master
self.test_button = Button(self.master, command=self.tb_click)
self.test_button.configure(
text="Calc", background="Grey",
padx=50
)
self.test_button.pack(side=TOP)
self.test_text = Text(self.master)
self.test_text.configure(background ="White",height = 2, width = 15)
self.test_text.pack(side=TOP)
def tb_click(self):
self.test_text.configure(highlightthickness = 0)
self.cnt += 1
time.sleep(3) #simulate long running process
if(self.cnt>1): #check result of long running process
self.test_text.configure(highlightbackground = "red")
self.test_text.configure(highlightthickness = 4)
root = Tk()
root.title("Test Border")
main_ui = GUI(root)
root.mainloop()
当您按下按钮时,
mainloop()
运行您的函数,并等待函数结束,然后重新绘制窗口和窗口中的所有小部件。这样,对于所有更改,它只需重新绘制一次。它需要更少的时间,而且窗口不会闪烁
但使用root.update()
可以强制mainloop()
更早地重新绘制窗口
self.test_text.configure(highlightthickness=0)
root.update()
成功了!您知道这可能会导致哪些潜在问题吗?例如,如果我尝试从另一个线程更新root?大多数GUI不喜欢在线程中工作-它们应该在一个线程中运行-并不总是必须是主线程。若其他线程必须在GUI中更改某些内容,那个么它应该向主线程发送消息,主线程应该更改它。您可以使用模块发送到主线程,或者简单地使用全局变量。主线程需要使用
root.after(毫秒,函数名)
定期执行函数,该函数将从线程获取消息并更改GUI。