Как использовать содержимое Entry в другом классе? - PullRequest
0 голосов
/ 05 февраля 2019

Надеюсь, это не повторяется, похоже, я один из немногих, кто предпочитает использовать Tkinter в качестве Tkinter, а не в качестве TK .... Так что в значительной степени я использую классы для создания окон.Второе окно создает пользователя, но у меня возникают проблемы с использованием этого значения «имя пользователя» в другом классе.Чего мне не хватает?

(Отказ от ответственности, окна некрасивые, я сосредоточен на том, чтобы заставить функции работать.) Я попытался сделать значение username глобальной частью функции clicku() ...Я попытался сделать "username" функцией под Startwindow (с ее собственным определением), я попытался извлечь ее напрямую (как показано здесь) ... Я переместил ее, попытался работать с местностями... Я потерялся.Может ли создание записи собственным классом сохранить эту проблему ... ???

from tkinter import *


class Window(Frame):

    def __init__(self, master=None, *args, **kwargs):
        Frame.__init__(self,master,*args,**kwargs)
        self.pack()
        self.pack_propagate(0)
        self.labelone = Label(self, text = "Welcome to our class! Click start to begin")
        self.labelone.grid(row=1,column=1)
        self.buttonone = Button(self, text="start", command=click)
        self.buttonone.grid(row=2,column=1)


class Startwindow(Frame):

    def __init__(self, master=None, *args, **kwargs):
        Frame.__init__(self,master,*args,**kwargs)
        self.grid(row=5,column=5)
        self.grid_propagate(0)
        self.text = Label(self, text = "What is your name?")
        self.text.grid(row=0,column=0)
        self.entry = Entry(self, width=15)
        self.entry.grid(row=1,column=0)
        self.buttontwo = Button(self, text="enter", command=clicku)
        self.buttontwo.grid(row=1,column=1)
        self.username = self.entry.get()



class introwindow(Frame):

    def __init__(self, master=None,*args,**kwargs):
        Frame.__init__(self,master,*args,**kwargs)
        user = str(w2.username)
        self.grid()
        self.grid_propagate(0)
        self.a = Label(self, text = "Aki: ")
        self.a.grid(row = 0, column = 0)
        self.sp1 = Label(self, text = "Hi" + w2.username)
        self.sp1.grid(row = 0, column = 1)
        self.sp2 = Label(self, text = "Nice to meet you!")
        self.sp1.grid(row = 1, column = 1)
        self.talk = Entry(self, width = 15)


def click():
    global w2
    w.destroy()
    w2 = Startwindow(root,width=500,height=500)


def clicku():
    w2.destroy()
    w3 = introwindow(root,width=500,height=500)






root = Tk()
w = Window(root, bg="red",width=500,height=500)

root.mainloop()

Я просто надеюсь напечатать имя пользователя в introwindow как часть Label sp1.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Поскольку ваш виджет ввода является атрибутом introwindow, вам просто нужно вызвать метод get для виджета ввода до того, как уничтожит окно.Затем вы можете передать значение в конструктор следующего окна

Например, это будет выглядеть примерно так:

def clicku():
    name = w2.entry.get()
    print("clickU:", name)
    w2.destroy()
    w3 = IntroWindow(root, width=500, height=500, name=name)

Конечно, вам нужно будет изменить IntroWindow класс, чтобы принять имя.

0 голосов
/ 05 февраля 2019

Вы можете сделать это, создав глобальный экземпляр tkinter StringVar.Это делается для кода, размещенного в вашем вопросе (который я также обновил, чтобы более точно следовать PEP 8 - Руководству по стилю для кода Python ).

Ваш текущий дизайн не позволяетиспользуя их наилучшим образом (именно поэтому я сделал его глобальной переменной).Но для дальнейшего использования, вот некоторая дополнительная информация о том, как их можно использовать.

from tkinter import *


class Window(Frame):
    def __init__(self, master=None, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)
        self.pack()
        self.pack_propagate(0)
        self.labelone = Label(self, text="Welcome to our class! Click start to begin")
        self.labelone.grid(row=1, column=1)
        self.buttonone = Button(self, text="start", command=click)
        self.buttonone.grid(row=2,column=1)


class StartWindow(Frame):
    def __init__(self, master=None, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)
        self.grid(row=5,column=5)
        self.grid_propagate(0)
        self.text = Label(self, text="What is your name?")
        self.text.grid(row=0,column=0)
        self.entry = Entry(self, width=15, textvariable=username)
        self.entry.grid(row=1,column=0)
        self.buttontwo = Button(self, text="enter", command=clicku)
        self.buttontwo.grid(row=1,column=1)
        self.username = self.entry.get()


class IntroWindow(Frame):
    def __init__(self, master=None, *args, **kwargs):
        Frame.__init__(self,master, *args, **kwargs)
        self.grid()
        self.grid_propagate(0)
        self.a = Label(self, text="Aki: ")
        self.a.grid(row=0, column=0)
        self.sp1 = Label(self, text="Hi " + username.get())
        self.sp1.grid(row=0, column=1)
        self.sp2 = Label(self, text="Nice to meet you!")
        self.sp1.grid(row=1, column=1)
        self.talk = Entry(self, width=15)


def click():
    global w2
    w.destroy()
    w2 = StartWindow(root, width=500, height=500)


def clicku():
    w2.destroy()
    w3 = IntroWindow(root, width=500, height=500)


if __name__ == '__main__':

    root = Tk()
    username = StringVar()
    w = Window(root, bg="red", width=500, height=500)

    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...