捕获其他 QWidget 事件的副本?
capture a copy of other QWidget events?
我正在开发一个小部件,它需要在另一个小部件匹配移动或调整大小时自行更新。目前,我让另一个小部件自己执行 resizeEvent()
和 moveEvent()
,并在其中发出我的小部件连接到的信号。
但是,我不喜欢这种设置。稍后说我想让我的其他小部件用它的 resizeEvent()
.
做不同的事情
有没有办法让 widget A(来自 widget A only)当小部件 B 的 resizeEvent()
或 moveEvent()
被触发时通知?
您可以创建一个 Helper class 来负责监控,这样您就不需要覆盖 classes。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Helper(QObject):
def setWidgets(self, emmiter, receiver):
emmiter.installEventFilter(self)
self.emmiter = emmiter
self.receiver = receiver
def eventFilter(self, obj, event):
if obj == self.emmiter:
if event.type() == QEvent.Resize:
self.receiver.resize(self.emmiter.size())
elif event.type() == QEvent.Move:
self.receiver.move(event.pos())
return QObject.eventFilter(self, obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
helper = Helper()
w1 = QWidget()
w1.setWindowTitle("emmiter")
w2 = QWidget()
helper.setWidgets(w1, w2)
w1.show()
w2.show()
sys.exit(app.exec_())
我正在开发一个小部件,它需要在另一个小部件匹配移动或调整大小时自行更新。目前,我让另一个小部件自己执行 resizeEvent()
和 moveEvent()
,并在其中发出我的小部件连接到的信号。
但是,我不喜欢这种设置。稍后说我想让我的其他小部件用它的 resizeEvent()
.
有没有办法让 widget A(来自 widget A only)当小部件 B 的 resizeEvent()
或 moveEvent()
被触发时通知?
您可以创建一个 Helper class 来负责监控,这样您就不需要覆盖 classes。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Helper(QObject):
def setWidgets(self, emmiter, receiver):
emmiter.installEventFilter(self)
self.emmiter = emmiter
self.receiver = receiver
def eventFilter(self, obj, event):
if obj == self.emmiter:
if event.type() == QEvent.Resize:
self.receiver.resize(self.emmiter.size())
elif event.type() == QEvent.Move:
self.receiver.move(event.pos())
return QObject.eventFilter(self, obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
helper = Helper()
w1 = QWidget()
w1.setWindowTitle("emmiter")
w2 = QWidget()
helper.setWidgets(w1, w2)
w1.show()
w2.show()
sys.exit(app.exec_())