2012-07-26 202 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