Python / Tkinter窗口事件和属性

时间:2010-10-27 22:01:22

标签: python windows user-interface forms tkinter

我一直在搜索有关以下Tkinter窗口功能的信息,但没有成功。平台是Windows,Python 2.7。在这篇文章的最后是可以用来探索Tkinter窗口事件的代码。

  1. 如何检测窗口最小化/最大化事件?通过绑定到窗口事件返回的事件对象确实包含有关这些事件的任何信息。我搜索了可能会暴露这些事件但没有成功的协议(如WM_DELETE_WINDOW)。

  2. 如何确定窗口框架边框大小(不是Tkinter框架,OS放置在Tkinter放置其小部件的容器周围的框架)?是否有一种非平台特定方式来发现这些Windows属性,还是需要使用特定于平台的解决方案,例如Windows下的win32 api?

  3. 如何确定窗口的可见性,例如。窗口是否不可见由.withdraw()设置?

  4. 是否可以取消窗口事件,例如。如果有人想将窗口限制在用户桌面上的某个位置?从窗口事件返回'break'不会取消窗口移动或调整事件大小。

  5. 以下是试验Tkinter窗口事件的示例代码。

    def onFormEvent( event ):
        for key in dir( event ):
            if not key.startswith( '_' ):
                print '%s=%s' % ( key, getattr( event, key ) )
        print
    
    import Tkinter as tkinter
    root = tkinter.Tk()
    lblText = tkinter.Label( root, text='Form event tester' )
    lblText.pack()
    root.bind( '<Configure>', onFormEvent )
    root.mainloop()
    

    更新:以下是我对以下事件的了解:

    1. event.type == 22(以下一项或多项更改:宽度,高度,x,y)

    2. event.type == 18(最小化)event.widget.winfo_viewable()= 0(不可见)

    3. event.type == 19(最小化后恢复)

    4. event.type == 2(最大化)

    5. event.type == 22(由于宽度和高度的变化而最大化后恢复)

1 个答案:

答案 0 :(得分:2)

使用.winfo_viewable()调用确定窗口可见性。如果可见则返回1,否则返回0.

如果您想阻止窗口调整大小,请按照您想要的方式设置窗口,然后使用

self.root.minsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())
self.root.maxsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())

__init__电话结束时。

要完全禁用窗口移动,您可能只想删除self.root.overrideredirect(True)标题栏和框架。