2014-07-11 37 views
4

我想确定哪个小部件(本例中为框架)位于顶部(或可见)。确定哪个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不帧

在我的申请,我有几个帧。每个框架上都有很多标签。繁忙功能从机床读取所有这些信息。随时获取所有信息使整个机器运转缓慢。我只想获取并更新用户可以看到的信息。我可以通过手动保存一个告诉我最后一个.lift()编辑窗口的全局信息来看到一种方法。但这似乎并不干净。 (总共有大约400个标签被更新,但是最多只有60个是在任何给定时间可见的,而一些“标签”实际上是图形化的仪表面,所以很多马力浪费更新这些当他们不可见时)

回答

2

当你点击按钮,你可以设置一些变量来保持信息标签是可见的。

您可以添加变量标签:

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

也可以选择不进入可见帧

visible = frame1 

如果所有的帧都与功能update它只能在该帧更新值的类

visible.update(all_data) 
+0

结束创建全局LastVisibleFrame。在哪里我。升()一帧我也LastVisibleFrame = frame1。每个框架都有一个函数IsVisible(),如果LastVisible == frame1,则返回True。我真的不想创造另一个全球,但这是我能想到的最干净的。 – Burtski

相关问题