【发布时间】:2014-04-17 08:08:32
【问题描述】:
我想使用 QMetaObject::invokeMethod 来调用对象的方法(稍后它将在另一个线程中运行,然后 invokeMethod 就派上用场了)。我在 Python 3.3 上使用 PySide 1.2.1 的 Qt 4.8 绑定。完整的例子是:
from PySide import QtCore
class Tester(QtCore.QObject):
def __init__(self):
super().__init__()
def beep(self):
print('beep')
if __name__ == '__main__':
t = Tester()
QtCore.QMetaObject.invokeMethod(t, 'beep', QtCore.Qt.AutoConnection)
输出是:
QMetaObject::invokeMethod: No such method Tester::beep()
虽然我期待beep。该方法没有被调用。
那怎么了?看起来很简单,我找不到错误。
编辑:我在方法上使用 `@QtCore.Slot' 装饰让它工作。感谢评论和答案。
【问题讨论】:
-
beep() 应该声明为一个插槽,不是吗?
-
哦,是的,这就是解决方案。需要在
def beep(self):前面加上@QtCore.Slot()。我不习惯它,因为现在连接信号我只给他任何可调用的,它工作正常。不是很明显必须在这里做,但感谢您的评论。
标签: python qt pyside qtcore qt-signals