Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 捕获其他QWidget事件的副本?_Python_Pyqt_Pyqt5_Qevent - Fatal编程技术网

Python 捕获其他QWidget事件的副本?

Python 捕获其他QWidget事件的副本?,python,pyqt,pyqt5,qevent,Python,Pyqt,Pyqt5,Qevent,我正在开发一个小部件,当另一个小部件与移动匹配或调整大小时,它需要更新自身。目前,我让另一个小部件自己执行resizeEvent()和moveEvent()操作,它在内部发出一个信号,我的小部件连接到该信号 但是,我不喜欢这种设置。稍后我想让我的另一个小部件用它的resizeEvent()做一件不同的事情 当小部件B的resizeEvent()或moveEvent()被触发时,是否有方法通知小部件a(仅来自小部件a),您可以创建一个负责监视的帮助器类,因此无需覆盖这些类 import sys

我正在开发一个小部件,当另一个小部件与移动匹配或调整大小时,它需要更新自身。目前,我让另一个小部件自己执行
resizeEvent()
moveEvent()
操作,它在内部发出一个信号,我的小部件连接到该信号

但是,我不喜欢这种设置。稍后我想让我的另一个小部件用它的
resizeEvent()
做一件不同的事情


当小部件B
resizeEvent()
moveEvent()
被触发时,是否有方法通知小部件a(仅来自小部件a),您可以创建一个负责监视的帮助器类,因此无需覆盖这些类

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_())

您可以创建一个负责监视的帮助器类,因此不需要覆盖这些类

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_())

好极了正是我想要的,我直接将它实现到我的自定义小部件类中,而不使用帮助器类,但是,设置完全一样,完美!好极了正是我想要的,我直接将它实现到我的自定义小部件类中,而不使用帮助器类,但是,设置完全一样,完美!