当最小化事件被捕获时,我尝试继承 QMainWindows 并调用 self.hide() 。当我按下最小化按钮时,它被最小化到任务栏,当我在任务栏按下它以使其再次出现在屏幕上时,我发现它不是不可见的。只有 QMainWindows 的内容是隐藏的,框架仍然存在。
这是 self.hide() 应该表现的吗?
我想让它最小化到系统托盘,但是我从这个问题中找到的许多答案都不起作用。
当最小化事件被捕获时,我尝试继承 QMainWindows 并调用 self.hide() 。当我按下最小化按钮时,它被最小化到任务栏,当我在任务栏按下它以使其再次出现在屏幕上时,我发现它不是不可见的。只有 QMainWindows 的内容是隐藏的,框架仍然存在。
这是 self.hide() 应该表现的吗?
我想让它最小化到系统托盘,但是我从这个问题中找到的许多答案都不起作用。
当最小化事件被捕获时,我尝试继承 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()