DeveloperLV
DeveloperLV

Reputation: 1781

How to pass value of Entry from one class to another class?

Target / Goal:

My goal is to pass an Entry widget from one class Window1 to another class Window2?

Code:

Here's my current code:

from tkinter import *
import tkinter.ttk as ttk


def main():
    root = Tk()
    app = Window1(root)
    root.mainloop()

class Window1:
    def __init__(self,master):
        self.master = master
        self.master.geometry('400x150')
        self.frame = Frame(self.master)
        self.frame.pack(fill="both", expand=True)

        self.label_username = Label(self.frame, text="Username: ",font=("bold",16))
        self.entry_username = Entry(self.frame, font = ("bold", 14))#pass this into Window 2 as label

        self.label_username.pack()
        self.entry_username.pack()

        self.logbtn = Button(self.frame, text="Login", font = ("bold", 10), command=self._login_btn_clicked)
        self.logbtn.pack()


    def _login_btn_clicked(self):
        # print("Clicked")
        username = self.entry_username.get()
        if username == 'test':
            self.master.withdraw()
            self.newWindow = Toplevel(self.master)
            self.app = Window2(self.newWindow)
        else:
            self.entry_username.delete(0,"end")

class Window2:
    def __init__(self,master):
        notebook = ttk.Notebook(master)
        notebook.pack(expand = 1, fill = "both")
        #Frames
        main = ttk.Frame(notebook)
        notebook.add(main, text='Main-Screen')

        self.output = Label(main, text = )#OUTPUT HERE
        self.output.pack()



if __name__ == '__main__':
    main()

What I have tried:

Here, at Window2 code:

    self.output = Label(main, text = )#OUTPUT HERE
    self.output.pack()

Text is currently empty, but I am trying to return the value from Window1 at widget name: self.entry_username but not sure how to do it.

This is what I have tried:

self.output = Label(main, text = Window1().entry_username.get())#OUTPUTHERE
self.output.pack()

Error:

But this is the error:

    self.output = Label(main, text = Window1().entry_username.get())#OUTPUT HERE
TypeError: __init__() missing 1 required positional argument: 'master'

Upvotes: 0

Views: 212

Answers (1)

Bryan Oakley
Bryan Oakley

Reputation: 386362

This really has nothing to do with tkinter, you use the same technique whether it's plain python or tkinter or anything else. To access an attribute of an object, you need to have a reference to the object.

For example, if you want Window2 to have access to data in Window1, you can pass the instance of Window1 to Window2:

def _login_btn_clicked(self):
    ...
        self.newWindow = Toplevel(self.master)
        self.app = Window2(self.newWindow, window1=self)
    ...

class Window2:
    def __init__(self,master, window1):
        self.window1=window1
        ...
        username = self.window1.entry_username.get()
        self.output = Label(main, text=username)

Upvotes: 1

Related Questions