2012-05-24 12 views
6

Próbuję dodać funkcję w klasie PyQt, ale zawsze zwraca mi błąd.Utwórz dynamiczny przycisk w PyQt

# Error: TypeError: connect() slot argument should be a callable or a signal, not 'NoneType' # 
def commander (self, arg): 
    exec arg  

def aButton (self, layout, **kwargs): 
    name = kwargs.pop("name","Button") 
    command = kwargs.pop("command", "") 
    button = QtGui.QPushButton(name) 
    button.clicked.connect(self.commander(command)) 
    layout.addWidget(button) 
    return button 

Może ktoś tutaj może mi pomóc rozwiązać to: ') Thx!

Odpowiedz

20

Trzeba funkcję:

button.clicked.connect(lambda: self.commander(command)) 

Uwaga lambda uniknie ocenę wywołania funkcji, więc to nazwać self.commander(command) tylko po kliknięciu

+2

good 'call' hehe .. –

+0

Dzięki! to działa ! – MObject

+1

w porządku! Jestem tu nowy;) thx ponownie :) – MObject

2

wydaje się, że w

button.clicked.connect(self.commander(command)) 

self.commander(command) wraca None zamiast sygnału lub wywoływalnym.

+0

Tak, ale ja po prostu chcesz wykonać jakiś kod po kliknięciu przycisku. Nie rozumiem, jaką wartość muszę zwrócić. return compile (arg, '', 'exec') Próbuję, ale to jest to samo ... – MObject