2017-07-11 2 views
0

Ich arbeite an einem Mini-GUI-Projekt, ich bin derzeit kämpfen, um herauszufinden, wie ausgewählte Wert aus der Liste und dann diesen Wert an die Hauptfunktion zurückgeben, so dass ich das verwenden kann Wert an anderer Stelle. Kann mir bitte jemand helfen !!!!Python GTK erhalten ausgewählten Wert aus der Treeview

#### 

    self.device_list_store = gtk.ListStore(str,str,str,str,str) 
    for device in self.get_dev_list(): 
     self.device_list_store.append(list(device)) 

    device_list_treeview = gtk.TreeView(self.device_list_store) 

    selected_row = device_list_treeview.get_selection() 
    selected_row.connect("changed",self.item_selected) 

    #### 

    def item_selected(self,selection): 
     model,row = selection.get_selected() 
     if row is not None: 
      selected_device = model[row][0] 

im Moment, die item_selected Funktion nichts zurückkehrt, möchte ich selected_device zurück zur Hauptfunktion zurückkehren, damit ich es in anderen Funktionen auch nutzen.

EDIT: I-Code oben bearbeitet haben Formatierungsfehler entfernen @jcoppens

+0

warum nicht 'return selected_device' als letzte Zeile der' item_selected' Funktion. Und lesen Sie [einige grundlegende Python-Tutorials] (https://docs.python.org/3/tutorial/index.html) und [Gtk tutorials] (https: //python-gtk-3-tutorial.readthedocs). io /)? – jcoppens

+0

Vielen Dank für Ihre Antwort, ich habe versucht, return selected_device, und rufen Sie die item_selected Funktion in der Hauptfunktion, es funktioniert nicht, der Fehler msg sagt TypeError: item_selected() dauert genau 2 Argumente (1 gegeben). Ich kann verstehen, dass ich einige Argumente an diese Funktion übergeben muss, aber das Problem ist, dass ich keine Ahnung habe, welche Parameter ich für diese Funktion verwenden muss, hoffentlich macht das für Sie Sinn. –

Antwort

0

As you can see in the documentation, die item_selected Funktion mit einem Parameter aufgerufen wird, tree_selection. Wenn Sie jedoch die Funktion in einer Klasse definieren, benötigt sie auch den Parameter self, der normalerweise automatisch hinzugefügt wird. In Ihrem (verwirrenden) Beispiel ist keine Klasse definiert, daher vermute ich, dass das Problem Ihr Programm ist, das unvollständig ist.

Auch ich vermute, Sie möchten nicht device_list_treeview = gtk.T... in der for-Schleife:

for device in self.get_dev_list(): 
     self.device_list_store.append(list(device)) 
     device_list_treeview = gtk.TreeView(self.device_list_store) 

Und ich vermute, Sie selected_device = mod... unter dem if eingerückt wollen:

if row is not None: 
selected_device = model[row][0] 

Bitte konvertieren Ihr Beispiel in ein komplettes Programm und korrekt formatiert.

BTW: item_selected ist kein guter Name für den Signal-Handler. Es wird auch aufgerufen, wenn das Element nicht ausgewählt ist (daher wird das Signal als "geändert" bezeichnet)!

Und wichtig: Auch wenn Sie zuerst die basic Python tutorials und Gtk tutorials lesen sollte, sollten Sie dann prüfen lazka's excellent reference for all the Python APIs verwenden. Es gibt einen Link auf der Seite, um es vollständig herunterzuladen und in Ihrem Computer zur Hand zu haben.

+0

Vielen Dank, das Problem wurde jetzt gelöst. Ich werde die Schulungsunterlagen lesen, die Sie vorgeschlagen haben, um sicherzustellen, dass all diese grundlegenden Dinge abgedeckt sind. –

+0

Großartig. Ich habe Ihre ursprüngliche Frage bearbeitet, um die Formatierungsprobleme zu entfernen. – jcoppens

Verwandte Themen