回答
您可以查看當前的狀態的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_())
最準確的方式做這將是觀看小部件的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)
這將從所有其他標誌減去最小化按鈕標誌。
嗨,大家好我更好地這樣來:
if self.windowState() == QtCore.Qt.WindowMinimized:
# Window is minimised. Restore it.
self.setWindowState(QtCore.Qt.WindowActive)
肯定不會總是這個功能`在Python
**感謝工作
可能的問題都**
'如果self.windowState()和QtCore.Qt.WindowMinimized:'更好,因爲它只是檢查最小化標誌而不管其他標誌。 – 101
- 1. 從最小化恢復窗口狀態
- 2. 無法恢復最小化窗口
- 3. 恢復NSProgressIndicator動畫後窗口最小化,然後恢復
- 4. C++ CLR窗口形成RegisterHotKey恢復最小化窗口
- 5. Flex:調整最大化窗口的恢復窗口的大小
- 6. 最小化和恢復窗體上的窗口小部件
- 7. 如何最小化/恢復c中的窗口#
- 8. 如何在wxpython/python中恢復最小化窗口/框架
- 9. 如何在qt中最小化時恢復到窗口模式
- 10. 如何在代碼隱藏中恢復最小化窗口?
- 11. 在定製的最小化按鈕上恢復窗口大小
- 12. 最大化窗口恢復到全屏
- 13. wxPython窗口最大化/恢復
- 14. 如何最小化窗口?
- 15. Adobe Air - 恢復啓動時最大化的窗口 - 恢復大小更大?
- 16. OSX上的QtRuby恢復定時器上的最小化窗口
- 17. WM_PAINT在最小化和恢復窗口後停止工作
- 18. 在恢復最小化窗口之前詢問密碼
- 19. 如何在最小化窗口後最大化窗口
- 20. 一個窗口可以「在」最小化(或最大化)和恢復狀態?
- 21. 如何恢復一個程序的窗口最小化到托盤
- 22. Node-Webkit:如何最小化窗口?
- 23. 如何最小化Java的JFrame窗口?
- 24. 如何防止窗口最小化?
- 25. Kendo窗口恢復不調用調整大小事件時最小化然後恢復
- 26. 如何將窗口最小化到確切的先前狀態(恢復或最大化)?
- 27. 窗口最小化和最大化
- 28. 禁用窗口最大化/最小化
- 29. JButton最小化窗口(JFrame)
- 30. 最小化Outlook窗口
謝謝加里,謝謝你的例子,但它讓我更容易一些:-) –