首页 文章

确定哪个Tkinter小部件位于顶部(或可见)

提问于
浏览
4

我想确定哪个小部件(在这种情况下是框架)在顶部(或者仍然是可见的) .

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个标签可见 . 而且一些'标签'实际上是图形仪表面,因此浪费了大量的马力当它们不可见时)

1 回答

  • 2

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

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

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

    或者您可以访问可见帧

    visible = frame1
    

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

    visible.update( all_data )
    

相关问题