确定哪个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()

[这很接近]但它适用于Windows而不是帧(或一般的小部件)

在我的应用程序中,我有几个框架.每个框架上都有许多标签. busywork函数从机床读取所有这些信息.一直掌握所有信息会使整个机器变得迟钝.我想只获取和更新用户可以看到的信息.我可以通过手动保持一个告诉我最后一个.lift()ed窗口的全局来看到一种方法.但这似乎并不干净. (总共有大约400个标签可以更新.但是在任何给定时间最多只有大约60个标签可见.而且一些’标签’实际上是图形表面,所以浪费了很多马力当它们不可见时)

最佳答案 单击按钮时,您可以设置一些变量以保持信息标签的可见性.

您可以将该变量添加到标签:

frame1 = Frame(...)
frame1.visible = False

或者您可以访问可见帧

visible = frame1

如果所有帧都是具有功能更新的类,则它只能在该帧中更新值

visible.update( all_data )
点赞