回答
您可以查看当前的状态的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窗口
谢谢加里,谢谢你的例子,但它让我更容易一些:-) –