2

PyQt4ウィンドウが最小化されている場合の方法、メソッドを呼び出してそのウィンドウを展開する

やり方を教えてください

とても感謝します

4

3 に答える 3

3

そのメソッドQWidgetを呼び出すことにより、の現在の状態を確認できます。windowState()状態を変更するには、新しい状態をに渡しますsetWindowState()

これは、5秒ごとに最小化されているかどうかを確認するアプリの例です。その場合、ウィンドウが復元されます。

これは単なる例です。5秒ごとに最小化されたウィンドウをチェックして復元することは、アプリで行うのは悪いことです;)。

import sys
import time
from PyQt4.QtGui import QApplication, QWidget
from PyQt4.QtCore import QTimer, Qt

class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.timer = QTimer()
        self.timer.setInterval(5000)
        self.timer.timeout.connect(self.check_state)
        self.timer.start()

    def check_state(self):
        if self.windowState() == Qt.WindowMinimized:
            # Window is minimised. Restore it.
            self.setWindowState(Qt.WindowNoState)


if __name__ == '__main__':        
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec_())
于 2012-09-14T15:43:06.767 に答える
3

これを行う最も正確な方法QWindowStateChangeEventは、ウィジェットを監視し、発生したらすぐに応答することです。これは複数の方法で実行できます。

eventターゲットウィジェットのメソッドを再実装する方法は次のとおりです。

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()

    def event(self, e):
        if e.type() == e.WindowStateChange:
            if self.windowState() & QtCore.Qt.WindowMinimized:
                print "Minimized"
                # self.showMaximized()

        # call the super class event() no matter what
        return super(Window, self).event(e)

これで、Minimizeを監視する他のウィジェットがあり、そのオブジェクトに新しいイベントメソッドを定義する必要がない場合は、他の複数のオブジェクトのイベントを監視するだけのオブジェクトを作成できます。これはイベントフィルターと呼ばれます。

class Watcher(QtCore.QObject):

    def eventFilter(self, obj, e):
        if obj.isWidgetType() and e.type() == e.WindowStateChange:
            if obj.windowState() & QtCore.Qt.WindowMinimized:
                print "Minimized"
                # obj.showMaximized()

        return False


app = QtGui.QApplication([])

aWindow = QtGui.QWidget()
aWatcher = Watcher(aWindow)

aWindow.installEventFilter(aWatcher)

aWindow.show()
app.exec_()

状態は複数の値の組み合わせである可能性があり、値が他の値の中に存在するかどうかを確認するためにマスクでチェックする必要があるため、をチェックするときは、の代わりにをwindowState使用する必要があることに注意してください。つまり、最初にウィンドウを最大化してから最小化すると、複数のウィンドウ状態になります。&==

ちなみに、最初に実際のウィンドウプロパティをカスタマイズするオプションもあります。したがって、最小化を防ぐことが目標である場合は、そのボタンを無効にすることができます。

aWindow = QtGui.QWidget()
flags = aWindow.windowFlags()
aWindow.setWindowFlags(flags ^ QtCore.Qt.WindowMinimizeButtonHint)

これにより、他のすべてのフラグから最小化ボタンフラグが差し引かれます。

于 2012-09-14T16:38:25.943 に答える
3

こんにちはみんな私はこの方法で来たほうがいいです:

if self.windowState() == QtCore.Qt.WindowMinimized:
   # Window is minimised. Restore it.
   self.setWindowState(QtCore.Qt.WindowActive)

確かに、この関数が常に動作しているとは限りません。
おそらくPythonの問題が機能
している**すべての人に感謝します**

于 2012-09-14T18:19:30.937 に答える