Как передать значение Entry из одного класса в другой? - PullRequest
0 голосов
/ 30 сентября 2019

Цель / Цель:

Моя цель - передать виджет Entry из одного класса Window1 в другой класс Window2?

Код:

Вот мой текущий код:

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()

Что я пробовал:

Здесь, в коде Window2:

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

Текст в настоящее время пуст, но я пытаюсь вернуть значение из Window1 в имени виджета: self.entry_username, но не уверен, как это сделать.

Это то, что я пытался:

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

Ошибка:

Но это ошибка:

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

1 Ответ

1 голос
/ 30 сентября 2019

Это действительно не имеет никакого отношения к tkinter, вы используете ту же технику, будь то обычный python, tkinter или что-то еще. Чтобы получить доступ к атрибуту объекта, вам нужно иметь ссылку на объект.

Например, если вы хотите, чтобы Window2 имел доступ к данным в Window1, вы можете передать экземпляр *От 1005 * до 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...