Singleshot: слот с аргументами - PullRequest
       19

Singleshot: слот с аргументами

1 голос
/ 20 сентября 2011

У меня странная проблема.Вот мой код:

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

Ответы [ 2 ]

7 голосов
/ 21 сентября 2011

Параметр, передаваемый в функцию SLOT, должен быть строкой с типами в качестве параметров, а не прямым вызовом, поэтому вы не можете подключить слот с параметрами к сигналу без какого-либо параметра.

Вывместо этого можно использовать лямбда-функцию:

QtCore.QTimer.singleShot(1, lambda : self.recall(arg1))
0 голосов
/ 20 сентября 2011

Похоже, когда вы звоните это:

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

Вы хотите назвать это вместо этого?

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

вы передаете int в качестве первого аргумента recall, который передает его непосредственно method1. int - это объект типа (тип целых чисел).

...