QT: Signal/Slot Frage
Verfasst: Freitag 22. August 2003, 13:29
Hallo!
Also ich bin ganz neu bei Python und auch bei QT. Ich hab ein bisschen Delphi Erfahrung, weshalb es mir das Signal/Slot Konzept angetan hat, in Delphi funktioniert das nämlich ganz ähnlich.
Nun zu meinem (Anfänger) Problem, das ich trotz dieses Buches nicht gebacken bekomme. Ist übrigens nur zum üben, kein richtiges Projekt.
Folgender Beispielcode
(die Einrückungen klappen nicht so recht, aber ich denke ihr wisst wie ihr den Code lesen müsst)
Das Problem hierbei ist das verbinden des Signals selectionChanged(QListViewItem *) mit meinem Slot "showxml". In der Form wie er oben steht, frisst es der Interpreter ohne Fehlermeldung, allerdings zeigt "print item.text" nur folgende Ausgabe:
Woran liegt das? Bei Recherchen mit Google hab ich noch folgende Variante gefunden, Signal und Slot zu verbinden:
allerdings meckert Python dann beim interpretieren mit folgender FM:
Wie kann ich also das Signal selectionChanged so mit dem slot verbinden, dass der Slot das aktuelle Item übergeben wird und ich mittels QListViewItem.text auf den Inhalt dieses Items zugreifen kann?
Das ganze ist übrigens Python 2.3 unter Windows mit PyQT 3.8 NC
Ciao
Romulus
Also ich bin ganz neu bei Python und auch bei QT. Ich hab ein bisschen Delphi Erfahrung, weshalb es mir das Signal/Slot Konzept angetan hat, in Delphi funktioniert das nämlich ganz ähnlich.
Nun zu meinem (Anfänger) Problem, das ich trotz dieses Buches nicht gebacken bekomme. Ist übrigens nur zum üben, kein richtiges Projekt.
Folgender Beispielcode
Code: Alles auswählen
class TreeView(QListView):
def showxml(self, item):
print item.text
def __init__(self, *args):
apply(QListView.__init__,(self, ) + args)
self.connect(self, SIGNAL("selectionChanged(QListViewItem *)"), self.showxml)
def main(args):
app = QApplication(sys.argv)
QObject.connect(app, SIGNAL('lastWindowClosed()'),
app, SLOT('quit()'))
w = TreeView()
app.setMainWidget(w)
s=open("auftrag.xml").read() //
p.start(s) //hier wird das Treeview gefüllt, Code nicht enhalten, funktioniert aber soweit
w.show()
app.exec_loop()
if __name__=="__main__":
main(sys.argv)
Das Problem hierbei ist das verbinden des Signals selectionChanged(QListViewItem *) mit meinem Slot "showxml". In der Form wie er oben steht, frisst es der Interpreter ohne Fehlermeldung, allerdings zeigt "print item.text" nur folgende Ausgabe:
Code: Alles auswählen
"<built-in method text of sip.wrapper object at 0x009274C0>"
Code: Alles auswählen
self.connect(self, SIGNAL("selectionChanged(const QListViewItem &)"), self.showxml)
Code: Alles auswählen
self.connect(self, SIGNAL("selectionChanged(const QListViewItem &)"), self.showxml)
RuntimeError: Signal has wrong argument types for slot
Das ganze ist übrigens Python 2.3 unter Windows mit PyQT 3.8 NC
Ciao
Romulus