2

PyQt4如果窗口最小化怎么办,调用方法展开那个窗口

请告诉我怎么做

我将不胜感激

4

3 回答 3

3

嗨,伙计们,我最好这样来:

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

当然并不总是这个函数是`工作
可能是python中的问题
**感谢所有人**

于 2012-09-14T18:19:30.937 回答
3

QWidget您可以通过调用其windowState()方法来检查 a 的当前状态。要更改状态,您将新状态传递给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)

现在,如果您有一些其他小部件要监视最小化,并且您不想在该对象上定义新的事件方法,您可以创建一个对象来简单地监视多个其他对象的事件。它被称为事件过滤器:

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,您应该使用&to 而不是 比较==,因为状态可以是多个值的组合,您需要使用掩码检查它以查看该值是否存在于其他值中。即如果你先最大化窗口然后最小化它,它将有多个窗口状态。

附带说明一下,您还可以选择首先自定义实际的窗口属性。因此,如果您的目标是防止最小化,您可以禁用它的按钮:

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

这将从所有其他标志中减去最小化按钮标志。

于 2012-09-14T16:38:25.943 回答