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
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
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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem ich gepostet eine Frage Stachoverflow vorgeschlagen, einen link, der erklärt eine Menge. Hier ist die Antwort:
Sie sollten den link posten, dann, weil, obwohl wir schätzen Sie die Zeit nehmen, zu posten Lösung für deine Frage, es ist wirklich nicht genug sagen.
sorry, aber haben Sie nicht wirklich getan, was Sie behaupten. Der Grund, den code der Fehler war, dass
connect
Methode erwartet ein Funktionsobjekt übergeben werden, aber die OP tatsächlich bestandenNone
(beim Versuch zu übergeben args seiner Funktion, die er eigentlich heißt es). Die einfache Lösung war der wrapmyFunction
genannt, mit seinen Argumenten in einer ad-hoc:lambda: self.myFunction(self.myObject, 'someArg')
aber anstatt Sie irgendwie entgleist die Frage hinweist, slots und Signale-Mechanismus, wenn das, was @alphanumerische brauchte, war eine einfache callback.InformationsquelleAutor alphanumeric