PyQt: Wie Verbinde QComboBox Funktion mit Argumenten

QComboBox ist eine Funktion mit der folgenden syntax:

myComboBox.activated.connect(self.myFunction )

Aber ich muss in der Lage sein zu senden, der die Argumente aus der ComboBox zu myFunction(). Aber wenn ich:

myComboBox.activated.connect(self.myFunction(myArg1, myArg2 )

Ich bin immer

TypeError: connect() slot argument should be a callable or a signal, not 'NoneType'

Welche syntax muss verwendet werden, um die Verbindung einer QComboBox auf eine Funktion, die in der Lage ist, auf Argumente empfangen, gesendet von Comobobox?

EDITIERT:

Hier ist der code, was eine TypeError:

connect() slot argument should be a callable or a signal, not 'NoneType'


from PyQt4 import QtCore, QtGui
import sys

class MyClass(object):
    def __init__(self, arg):
        super(MyClass, self).__init__()
        self.arg = arg        

class myWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)

        self.comboBox = QtGui.QComboBox(self)
        self.comboBox.addItems([str(x) for x in range(3)])

        self.myObject=MyClass(id(self) )

        self.comboBox.activated.connect(self.myFunction(self.myObject, 'someArg'))

    def myFunction(self, arg1=None, arg2=None):
        print '\n\t myFunction(): ', type(arg1),type(arg2)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myApp')
    dialog = myWindow()
    dialog.show()
    sys.exit(app.exec_())
mögliche Duplikate von "Erstellen" Taste "dynamic" in PyQt
Aussehen nehmen Sie Ihre code und ändern self.comboBox.activated.connect(self.myFunction(self.myObject, 'someArg')) durch self.comboBox.activated.connect(self.myFunction) es funktioniert perfekt für mich. Wie ich schon sagte, brauchen Sie nicht, um die Argumente angeben, die beim verbinden der slot.
Ich muss die Argumente angeben, die beim verbinden der slot. Wenn ich nicht die Argumente angeben, die beim verbinden der slot, wie ich wäre in der Lage, senden Sie die Argumente der Funktion? Es ist sehr einfach, wenn es keine Notwendigkeit, in Argumente zu gesendet. Aber in diesem Fall die Argumente müssen angegeben werden, und verbinden Sie den slot.
Ich glaube, du hast missverstanden, wie Signale und slots funktioniert. Sie KÖNNEN NICHT senden willkürliche types der Argumente, die auf ein bestimmtes signal. Das signal activate von QComboBox ist emited mit einem int finden Sie unter: pyqt.sourceforge.net/Docs/PyQt4/qcombobox.html#activated. So haben Sie, um zu definieren, Ihr eigenes signal, ein signal aussenden, dass Wert-Typen, die Sie wollen (MyClass für sich selbst.myObject und str für someArg). Und dann können Sie Strahlen Ihr signal von der Funktion, die Griffe activate Veranstaltung. und natürlich können Sie ein eigenes signal benötigt eine handler/slot zu.
Die built-in-Signale kennen (dieser ist vordefiniert) wie viele und welche Arten von Argumenten gehen, um gesendet werden zu Schlitzen. Die einzige, die Sie haben zu tun, zu implementieren, ein Steckplatz vorbereitet, in der solche Argumente. Wenn das signal nicht befasst sich mit der Art der Argumente, die Sie brauchen, gut, wieder, müssen Sie eine benutzerdefinierte signal.

InformationsquelleAutor alphanumeric | 2014-04-16

Schreibe einen Kommentar