确定哪个Tkinter控件在上面(或可见)
我想知道哪个小部件(在这个例子中是框架)在最上面(或者说是可见的)。
from Tkinter import *
spam1=0
spam2=1000
def busywork():
global spam1
global spam2
#if frame1 is on top / visible
spam1=spam1+1
label1.config(text=str(spam1))
#if frame2 is on top / visable
spam2=spam2+1
label2.config(text=str(spam2))
root.after(10,busywork)
root=Tk()
frame1=Frame(root)
frame2=Frame(root)
button1=Button(frame1,text="Bring Frame 2 to top",command=frame2.lift)
label1=Label(frame1,text=str(spam1))
button1.pack()
label1.pack()
frame1.place(relx=0,rely=0)
button2=Button(frame2,text="Bring Frame 1 to top",command=frame1.lift)
label2=Label(frame2,text=str(spam2))
button2.pack()
label2.pack()
frame2.place(relx=0,rely=0)
root.after(10,busywork)
root.mainloop()
[这个方法差不多]但它适用于窗口,而不是框架(或者说一般的小部件)
在我的应用程序中,有几个框架。每个框架上都有很多标签。这个繁琐的功能需要从机器工具中读取所有这些信息。每次都获取所有信息会让整个机器变得很慢。我希望只获取和更新用户能看到的信息。我可以通过手动维护一个全局变量来记录最后一个被提起的窗口,但这样做似乎不太干净。(总共有大约400个标签需要更新,但在任何时候最多只有大约60个是可见的。而且有些“标签”实际上是图形仪表盘,所以在它们不可见时更新这些会浪费很多资源)
1 个回答
2
当你点击按钮的时候,可以设置一个变量来记录哪个标签是可见的。
你可以把这个变量添加到标签上:
frame1 = Frame(...)
frame1.visible = False
或者你可以保持对可见框架的访问
visible = frame1
如果所有的框架都是带有 update
函数的类,那么它就可以只更新那个框架里的值
visible.update( all_data )