cooltogo
cooltogo

Reputation: 67

Obtaining widget values in tkinter

How do I refer to the widget values in the following code.Here I have added widgets by calling methods in the app class for different frames.Next,I want to access the values in all the Widgets(which the user enters) of all the frames at the same time.But I am not able to figure out how should I refer to them and access their values!

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.

Any help will be highly appreciated.Thanks in advance.

Upvotes: 0

Views: 395

Answers (1)

j_4321
j_4321

Reputation: 16179

The widgets in which the user can write have a get method that returns their content. But in order to do this, you need to store your widget in a class variable for example.

Edit: I had misunderstood the problem and I hadn't realized that the add_widget function would be called for different containers for the same instance. One way to keep track of all created widgets is to create a widget list:

  • add self.widgets = [] in __init__

  • define theadd_widget method like that:

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

Then to get the text entered by the user in all widgets (inside the write function):

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

Upvotes: 1

Related Questions