我有一个奇怪的问题。这是我的代码:
def method1(self, arg1, delay=True):
"""This is a method class"""
def recall(arg1):
self.method1(arg1, delay=False)
return
if delay:
print "A: ", arg1, type(arg1)
QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(int)), arg1)
return
print "B: ", arg1, type(arg1)
所以我在控制台中得到了这个:
A: 0 <type 'int'>
B: <type 'int'> <type 'type'>
在“B”中你应该得到与“A”相同的效果。谁知道什么是错的?如何获取arg1值 而不是它的类型?这没有任何意义......
PS:我正在尝试这样的事情:http://lists.trolltech.com/qt-interest/2004-08/thread00659-0.html
答案 0 :(得分:7)
传递给SLOT
函数的参数必须是一个字符串,其类型为参数,而不是直接调用,因此您无法将带参数的插槽连接到没有任何参数的信号。
您可以改为使用lambda函数:
QtCore.QTimer.singleShot(1, lambda : self.recall(arg1))
答案 1 :(得分:0)
看起来就像你在说这个:
QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(int)), arg1)
你的意思是打电话给这个吗?
QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(arg1)), arg1)
您将int
作为recall
的第一个参数传递,并将其直接传递给method1
。 int
是一个类型对象(整数的类型)。