PyQt4如果窗口最小化怎么办,调用方法展开该窗口
请告诉我该怎么做
我将非常感激
答案 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)
现在,如果您想要为Minimize观看其他窗口小部件,并且您不希望在该对象上定义新的事件方法,则可以创建一个只监视多个其他对象的事件的对象。它被称为事件过滤器:
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)
这将从所有其他标志中减去最小化按钮标志。
答案 1 :(得分: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_())
答案 2 :(得分:2)
嗨,大家好我这样来:
if self.windowState() == QtCore.Qt.WindowMinimized:
# Window is minimised. Restore it.
self.setWindowState(QtCore.Qt.WindowActive)
当然不总是这个功能是`工作
可能是python中的问题
**感谢所有**