2

我有一个奇怪的问题。这是我的代码:

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

4

2 回答 2

10

传递给SLOT函数的参数必须是类型为参数的字符串,不能直接调用,所以不能将带参数的槽连接到不带参数的信号上。

您可以改用 lambda 函数:

QtCore.QTimer.singleShot(1, lambda : self.recall(arg1))
于 2011-09-21T09:31:43.560 回答
1

当您调用它时,它看起来像:

QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(int)), arg1)

你的意思是打电话给这个吗?

QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(arg1)), arg1)

int作为 的第一个参数recall传递,它直接将其传递给method1. int是一个类型对象(整数的类型)。

于 2011-09-20T17:49:00.153 回答