可以使用wxPython自动隐藏框架/对话框吗?
我想创建一个应用程序,这个程序有3到4个框架(或者说窗口),每个框架都固定在屏幕的某一侧,就像任务栏那样。当某个框架不被使用时,我希望它能自动隐藏(就像Windows的任务栏,或者Mac的Dock那样)。当我把鼠标移动到屏幕边缘那个隐藏框架的位置时,我希望它能重新显示出来。
这个应用程序是用Python写的(使用wxPython来处理基本的界面部分)。有没有人知道怎么在Python中实现这个功能?我猜这可能和操作系统有关?如果是这样的话,我想先专注于Windows。
我不太经常做图形界面编程,所以如果这段话听起来不太清楚,我先说声抱歉。
3 个回答
我觉得你可以很简单地做一个和桌面一样大的窗口,然后根据鼠标的位置来设置一个不活动的变量,接着用循环来检查这个变量。然后你可以开一个线程来定时检查这四个不活动的变量。我个人会设计成,当这些变量从15降到0的时候,窗口的大小和位置会改变,变成一个表格样式,并在上面创建一个按钮来重新激活它。这个过程需要做很多技术上的工作,但如果你搞明白了,其实很简单。
我个人的做法是把FogleBird提到的EVT_ENTER_WINDOW和EVT_LEAVE_WINDOW这两个事件结合起来,再加上一个wx.Timer定时器。这样的话,只要窗口或者对话框在不活动状态下超过x秒,就可以调用它的Hide()方法来隐藏它。
据我所知,这个功能没有内置的解决方案。
当窗口被隐藏时,你是希望它完全看不见,还是说可以露出几像素的边框?如果能露出边框,那就很容易捕捉到鼠标悬停事件。否则,你可能需要用一些工具,比如pyHook,来获取系统范围内的鼠标事件,以便知道什么时候要展开你的窗口。
事件EVT_ENTER_WINDOW
和EVT_LEAVE_WINDOW
在这里也可能有用,可以帮助你知道用户什么时候进入或离开窗口,这样你就可以展开或收起它。
展开或收起窗口其实就是显示或隐藏窗口,或者调整窗口大小。就是一些标准的窗口操作,没什么复杂的。
顺便说一下,你可能想用wx.ClientDisplayRect
来确定窗口的位置。这个方法会给你一个矩形区域,表示桌面上不包括任务栏或其他工具栏的部分,假设你想避免和这些东西重叠。