PyQt中Touch类发射信号至test类无法接收参数问题
问题原因及解决方法
你的代码存在两个核心问题,导致信号无法被接收:
- test类从未被实例化:主函数里只创建了Touch的显示实例window2,但完全没初始化test对象,test里的信号连接逻辑根本没执行。
- 信号连接的是错误实例:就算创建test实例,它的__init__里会新建一个独立的Touch对象,和主函数里显示的window2不是同一个,window2发出的信号自然不会被捕获。
修正后的代码
from PyQt5 import QtWidgets, QtCore from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys class Touch(QMainWindow): td = pyqtSignal(str) def __init__(self, parent=None): super(Touch, self).__init__(parent) self.setWindowTitle('Capture Touch Event') self.setFixedSize(400, 400) self.move(100, 300) def eventFilter(self, obj, event): if event.type() == QEvent.TouchBegin: print('touch down') self.td.emit('Down_Pass') return True elif event.type() == QEvent.TouchEnd: print('touch up') self.td.emit('Up_Pass') return True return super(Touch, self).eventFilter(obj, event) class test(): def abc(self, x): print(x) print("1236456") if __name__ == '__main__': app = QtWidgets.QApplication([]) window2 = Touch() window2.setAttribute(Qt.WA_AcceptTouchEvents, True) window2.installEventFilter(window2) # 关键:创建test实例,将显示中的window2的信号连接到test的回调 test_obj = test() window2.td.connect(test_obj.abc) window2.show() sys.exit(app.exec_())
说明
- 在主函数里创建test实例
test_obj,并直接将正在显示的window2的td信号连接到test_obj.abc方法,确保信号从正确的实例发出并被接收。 - 移除了test类内多余的Touch实例创建,让test专注于信号回调逻辑。
内容的提问来源于stack exchange,提问作者acs123
相关产品推荐
相关产品推荐

