【问题标题】:Detect when a widget change from visible to invisible or the opposite [duplicate]检测小部件何时从可见变为不可见或相反[重复]
【发布时间】:2021-01-21 12:24:24
【问题描述】:

当我们可见的小部件变为不可见.pack_forget() 或不可见的小部件变为可见.pack() 时,是否可以得到通知?

类似button.bind("<Visible>", func_triggered_when_the_button_become_visible)

我想隐藏和显示整个框架,当我将小部件隐藏在其中时,我希望重置它们的值。

【问题讨论】:

  • 我建议在按钮“不可见”时设置一个标志,然后使用基本的if 语句,我认为没有任何内置命令
  • 我明白你的意思,我实际上正在这样做,但一个活动会非常有帮助。感谢您的快速回答。
  • 试试<Map><Unmap>
  • 我已经添加了答案,请告诉我
  • 这正是我想要的,谢谢!

标签: python tkinter widget bind visibility


【解决方案1】:

根据 acw1668 的建议,我认为 <Map> 是您正在寻找的东西。下面是一个例子,让你更好地理解:

from tkinter import *
from tkinter import messagebox

root = Tk()

def check(event): #function to be triggered only when the button is visible
    messagebox.showinfo('Visible','Seeing this message only because button is visible')

b = Button(root,text='Im going to disappear') #making button but not packing it(invisible)

b1 = Button(root,text='Click me to make the button disappear',width=50,command=lambda: b.pack_forget()) #to hide the button(to make invisible)
b1.pack(padx=10)

b2 = Button(root,text='Click me to make the button appear',width=50,command=lambda: b.pack()) #to show the button(to make visible)
b2.pack(padx=10)

b.bind('<Map>',check) #every time button is visible, check() is triggered

root.mainloop()

我已发表评论以更好地理解这一点,如果有任何疑问,请告诉我。

更多关于 &lt;Map&gt; 来自文档:

每当窗口的映射状态发生变化时,都会生成 Map 和 Unmap 事件。

在未映射状态下创建窗口。顶级窗口在转换到正常状态时会被映射,而在撤回和图标状态下则不会被映射。当其他窗口置于几何管理器(例如包或网格)的控制下时,它们会被映射。

一个窗口只有在它和它的所有祖先都被映射时才可见。请注意,几何管理器通常不会映射他们的孩子,直到他们自己被映射,并在他们变得未映射时取消映射所有孩子;因此在 Tk Map 和 Unmap 事件中指示窗口是否可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2022-01-12
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多