从任务栏隐藏窗口

时间:2010-12-02 04:54:08

标签: python qt pyqt

我正在尝试最小化托盘的窗口,但似乎它拒绝隐藏任务栏。我花了一点时间将问题代码归结为此。它不是很好,所以我想知道我是否需要其他东西来隐藏我的应用程序到Windows 7中的托盘。

import sys, os
from PyQt4 import uic 
from PyQt4.QtGui import QMainWindow, QApplication

class MyClass(QMainWindow):
    def __init__(self, parent = None):
        QMainWindow.__init__(self, parent)
        self.ui = uic.loadUi(os.path.join("gui", "timeTrackerClientGUI.ui"), self)
    def hideEvent(self, event):
        self.hide()
    def showEvent(self, event):
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    wnd = MyClass()
    wnd.show()
    app.exec_()

似乎应用程序图标确实隐藏了但是又弹出了另一个图标,如果我多次单击任务栏图标,我可以让这两个图标闪烁,在第一个隐藏之前看起来有点像这样一个分秒:

alt text

2 个答案:

答案 0 :(得分:3)

这需要一个非常难看的黑客才能让它工作但是如果有人感兴趣,这里是最终代码,ph是我的平台特定模块,你可以使用platform.name或类似函数:

def hideEvent(self, event):
    self.hide()
    if ph.is_windows():
        self.hidden = True
        self.setWindowFlags(Qt.ToolTip)
def showEvent(self, event):
    if ph.is_windows() and self.hidden:
        self.setWindowFlags(Qt.Window)
        self.hidden = False
    self.show()

答案 1 :(得分:1)

在showEvent()/ hideEvent()中调用show / hide没有意义 - 这些事件是show()/ hide()调用(等)的结果,而不是触发器。如果要通过单击托盘图标来切换窗口可见性,请在窗口小部件上尝试setVisible(!isVisible()),如果要在用户单击窗口关闭按钮时隐藏窗口,请尝试重新实现closeEvent():

MyMainWindow::closeEvent( QCloseEvent* e ) {
    hide();
    e->accept();
}

在Python中,那是

def closeEvent(self, event):
    self.hide()
    event.accept()