2016-07-15 3 views
0

Wie verweise ich auf die Widget-Werte im folgenden Code.Hier habe ich Widgets durch Aufrufen von Methoden in der App-Klasse für verschiedene Frames hinzugefügt. Als nächstes möchte ich auf die Werte in allen Widgets (die der Benutzer eingibt) aller Frames gleichzeitig. Aber ich bin nicht in der Lage herauszufinden, wie ich auf sie verweisen soll und auf ihre Werte zugreifen soll!Widget-Werte in tkinter erhalten

class myapp(): 
    def __init__(self,parent): 
     self.parent=parent 
     self.container=Frame(self.parent) 
     self.container.pack() 

     self.tab1=Button(self.container,text='tab1',command=self.tab1Click) 
     self.tab2=Button(self.container,text='tab*emphasized text*2',command=self.tab2Click) 
     self.tab1.pack() 
     self.tab2.pack() 
    def tab1Click(self): 
     top=Toplevel() 
     self.container1=Frame(top) 

     self.add_widget1(self.container1)#self.add_widgeti(parent) is a method in myapp() class to add a widget to a frame 
     self.add_widget2(self.container1) 
     self.add_widget3(self.container1) 

     self.container1.pack() 

    def tab2Click(self): 
     top=Toplevel() 
     self.container2=Frame(top) 

     self.add_widget2(self.container2) 
     self.add_widget4(self.container2) 
     self.add_widget5(self.container2) 

     self.container2.pack() 

    def write(self): 
     #here I want to write the values contained in the widgets in both frames in a file,but I am not able to figure out how do I refer to them and access their values. 

Jede Hilfe wird sehr geschätzt werden. Vielen Dank im Voraus.

Antwort

1

Die Widgets, in denen der Benutzer schreiben kann, haben eine get Methode, die ihren Inhalt zurückgibt. Dazu müssen Sie Ihr Widget beispielsweise in einer Klassenvariablen speichern.

Bearbeiten: Ich hatte das Problem missverstanden und ich hatte nicht erkannt, dass die add_widget Funktion für verschiedene Container für die gleiche Instanz aufgerufen werden würde. Eine Möglichkeit, den Überblick über alle bestehenden Widgets zu halten, ist ein Widget-Liste zu erstellen:

  • hinzufügen self.widgets = [] in __init__

  • definieren die add_widget Methode wie folgt aus:

def add_widget(self, container): 
     self.widgets.append(Entry(container, text="enter text here")) 
     self.widgets[-1].pack() 

Dann, um den Text zu erhalten d durch den Anwender in allen Widgets (in der Schreibfunktion):

texts = [] 
for widget in self.widgets: 
    texts.append(widget.get()) 
+0

: Aber wie kann ich in Schreiben auf WIDGET2 beziehen(), weil es in den beiden Frames container1 und container2.I ist gefragt, ob es etwas war Art der Bezugnahme auf die Widgets in Bezug auf ihre Eltern (etwas wie container.widget2 ... aber ich konnte es nicht finden). bitte Hilfe! – cooltogo

+0

Danke. Es hat funktioniert! – cooltogo