2012-09-14 91 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

相關問題