Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 基于对象的QSignalMapper出现问题_Python_Qt_Pyqt_Signals Slots_Qsignalmapper - Fatal编程技术网

Python 基于对象的QSignalMapper出现问题

Python 基于对象的QSignalMapper出现问题,python,qt,pyqt,signals-slots,qsignalmapper,Python,Qt,Pyqt,Signals Slots,Qsignalmapper,我正试图在PyQt中设置一个信号槽安排,在那里信号传输大量信息。我想通过将要传输的各种信息设置为QObject的属性,将QObject用作载体。从理论上讲,这应该是可行的-有一个QSignalMapper.setMapping()重载,它将发送方和QObject作为参数 以下是简化代码: self.mapper = QtCore.QSignalMapper() self.timeline.finished.connect(self.mapper.map) carrier = QtCore.QOb

我正试图在PyQt中设置一个信号槽安排,在那里信号传输大量信息。我想通过将要传输的各种信息设置为
QObject
的属性,将
QObject
用作载体。从理论上讲,这应该是可行的-有一个
QSignalMapper.setMapping()
重载,它将发送方和
QObject
作为参数

以下是简化代码:

self.mapper = QtCore.QSignalMapper()
self.timeline.finished.connect(self.mapper.map)
carrier = QtCore.QObject()
carrier.contents = (item1, item2)
self.mapper.setMapping(self.timeline, carrier)
self.portalMapper.mapped.connect(self.report)

def report(self, carrierObject):
    print 'Triggered'
不幸的是,它不起作用。我已经通过消除过程将问题追溯到
setMapping
函数

如果我用
int
关闭
QObject
,同样的方案也能正常工作。它与我添加到
QObject
的属性也没有任何关系-使用新的开箱即用
QObject
会导致相同的问题


似乎在这里发生了一些事情,
setMapping
函数的这个特定重载。关于这里的问题有什么想法吗?

感谢@ekhumaro的建议,完全跳过QSignalMapper方法,只创建一个自定义信号。工作起来很有魅力。

使用
QSignalMapper
没有任何价值。只需定义一个自定义信号并直接发送数据。我不确定如何做到这一点,@ekhumoro。。。我的代码正在等待的信号是Qt标准
QTimeline.finished
,并且必须是,因为我正在等待计时器结束,然后才能继续下一步。我可以将
finished()
信号连接到一个函数,该函数依次发送一个自定义信号。。。但这不是简单地概括了QSignalMapper的用途吗?接收一个信号,然后用一个新参数发送一个新信号?当然,但它做得更简单。但是,您的代码真的需要发送信号吗?在您的示例中,信号只有一个消费者(
self
),因此发出信号似乎是完全冗余的。您所做的只是发送一个指向对象的指针,而不是数据本身(也就是说,任何东西都不会被复制)。您还可以保留对数据本身的引用作为
self
的属性,然后直接在连接到
finished
信号的插槽中访问该引用。