2010-12-02 103 views
2

我想盡量減少托盤的窗口,但它似乎拒絕隱藏任務欄。我花了一點時間將問題代碼解壓縮到這裏。這不是mcuh所以我不知道如果我需要別的東西來掩飾我的應用程序在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_() 

看來應用程序圖標沒有隱藏,而是接着又一個彈出,如果我點擊任務欄圖標多次我能得到這兩個圖標閃爍,看起來有點像這樣的splitsecond之前的第一個隱藏:

alt text

回答

2

花了相當醜陋的黑客得到它的工作,但這裏是最終的代碼,如果有人有興趣,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

調用showEvent()顯示/隱藏/ hideEvent()沒有意義 - 這些事件是show()/ hide()調用(等)的結果,而不是觸發器。如果要通過單擊托盤圖標切換窗口可見性,請嘗試在窗口小部件上設置setVisible(!isVisible()),如果要在用戶單擊窗口關閉按鈕時隱藏窗口,請嘗試重新實現closeEvent():

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

在Python,這是

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

我想隱藏窗口,以便在最小化它時不顯示在任務欄中。 – dutt 2010-12-02 09:34:06