2012-09-14 155 views

回答

2

您可以查看当前的状态的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_()) 
+0

谢谢加里,谢谢你的例子,但它让我更容易一些:-) –

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

在旁注中,您还可以选择自定义实际的窗口属性。所以,如果你的目标是防止减少,你可以为它禁用按钮:

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

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

2

嗨,大家好我更好地这样来:

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

肯定不会总是这个功能`在Python
**感谢工作
可能的问题都**

+0

'如果self.windowState()和QtCore.Qt.WindowMinimized:'更好,因为它只是检查最小化标志而不管其他标志。 – 101

相关问题