PyQt4:self.hide()只隐藏内容

时间:2012-07-26 03:45:46

标签: python-3.x pyqt4

我试图继承QMainWindows并在捕获最小化事件时调用self.hide()。当我按下最小化按钮时,它被最小化到任务栏,当我在任务栏上按下它以便它再次出现在屏幕上时,我发现它不是不可见的。只有QMainWindows的内容被隐藏,框架仍然存在。

这是self.hide()应该表现的吗?

我想最小化系统托盘,但我从question找到的许多答案都不起作用。

enter image description here

1 个答案:

答案 0 :(得分:0)

  

我试图将QMainWindows子类化并调用self.hide()   当最小化事件被捕获时。当我按下最小化   按钮,它被最小化到任务栏,当我按下它时   任务栏,以便它再次出现在屏幕上,我发现它不是   无形。只有QMainWindows的内容是隐藏和框架   还在那里。

     

这是self.hide()应该表现的吗?

我相信这是正确的行为。当您执行self.hide()时,您没有隐藏窗口(如链接问题的已接受答案中所示),但其中包含小部件。这就是为什么当你恢复时你会看到框架,而不是小部件。

在您的链接问题中,请参阅其他答案并尝试使用 - 有代码示例。

更新:

以下是您链接问题的一个工作示例(在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()