0

QMainWindows をサブクラス化し、最小化イベントがキャッチされたときに self.hide() を呼び出そうとしました。最小化ボタンを押すとタスクバーに最小化され、タスクバーで押して画面に再び表示されると、非表示にならないことがわかりました。QMainWindows のコンテンツのみが非表示になり、フレームはまだそこにあります。

それは self. hide() が振る舞うべきものですか?

システム トレイに最小化したいのですが、この質問から見つけた回答の多くが機能しませんでした。

ここに画像の説明を入力

4

1 に答える 1

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()
于 2012-07-29T05:31:57.597 に答える