2012-07-26 306 views
0

我試圖在捕獲最小化事件時繼承QMainWindows並調用self.hide()。當我按下最小化按鈕時,它被最小化爲任務欄,當我在任務欄上按下它以使它再次出現在屏幕上時,我發現它不可見。只有QMainWindows的內容被隱藏,框架仍然存在。PyQt4:self.hide()只隱藏內容

self.hide()應該表現什麼?

我想盡量減少到系統托盤,但許多我從這個question發現的答案沒有奏效。

enter image description here

+0

你可以把一些代碼嗎? – Jeff 2012-07-26 16:12:59

回答

0

我試圖子類QMainWindows並撥打電話到self.hide() 時,儘量減少事件被抓住了。當我按下最小化 按鈕時,它最小化爲任務欄,並且當我在 任務欄上按下它以使其再次出現在屏幕上時,我發現它不是 不可見。只有QMainWindows的內容被隱藏,並且框架 仍然存在。

self.hide()應該表現什麼?

我相信這是正確的行爲。當你做self.hide()時,你並沒有隱藏窗口(正如鏈接問題的接受答案中所建議的),而是隱藏其中的小部件。這就是爲什麼當你恢復時,你會看到框架,而不是小部件。

在你的鏈接的問題看到其他答案,並嘗試它們 - 有代碼示例。

UPDATE:

這裏是一個工作例如從你的鏈接的問題(在KDE測試使用Python 2.7):

import sys 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout,QSystemTrayIcon 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__()  
     self.initUI() 

    def initUI(self):    
     self.icon = QSystemTrayIcon() 
     r = self.icon.isSystemTrayAvailable() 
     print r 
     self.icon.setIcon(QtGui.QIcon(':/trolltech/styles/commonstyle/images/networkdrive-16.png')) 
     self.icon.show() 
     #self.icon.setVisible(True) 
     self.setGeometry(300, 300, 250, 150) 
     self.setWindowIcon(QtGui.QIcon(':/trolltech/styles/commonstyle/images/networkdrive-16.png'))   
     self.setWindowTitle('Message box')  
     self.show() 
     self.icon.activated.connect(self.activate) 
     self.show() 

    def closeEvent(self, event): 

     reply = QtGui.QMessageBox.question(self, 'Message', 
        "Are you sure to quit?\n(choose No to minimize to tray, and double click to restore)", 
        QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) 
     if reply == QtGui.QMessageBox.Yes: 
      event.accept()  
     else: 
      self.icon.show()  
      self.hide() 
      event.ignore() 

    def activate(self, reason): 
     print reason 
     if reason == 2: 
      self.show() 

    def __icon_activated(self, reason): 
     if reason == QtGui.QSystemTrayIcon.DoubleClick: 
      self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

在相關問題中,接受的答案建議調用self.hide()以「隱藏到托盤」,但只將窗口移動到任務欄,因此我不明白爲什麼這種方法有效。 – lamwaiman1988 2012-07-29 05:45:05

+0

@ gunbuster363,看到我添加的代碼 – warvariuc 2012-07-29 08:44:21