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()