Как правильно связать классы друг с другом в python с помощью tkinter? - PullRequest
0 голосов
/ 30 сентября 2018

У меня вопрос, как правильно связать мои классы друг с другом.У меня есть один основной класс с моим первым окном, в которое пользователь должен добавить определенную информацию, после того, как он подтвердил, что открывается новое окно, в котором он должен сделать следующий шаг.Вы можете взглянуть на мой код свысока, класс MyForm - это основной класс, а класс popup - это следующее окно.Но я не уверен, правильно ли я это связал.Это работает, но странным образом.Так как это улучшить, чтобы у меня не было проблем с более серьезными проектами позже.Код:

from tkinter import Tk, Label, Entry, Button, W, Toplevel
from tkinter import messagebox

class MyForm:
    def thanx(self):
        if any((len(self.e.get().strip()) == 0, len(self.e2.get().strip()) == 0, len(self.e2.get().strip()) == 0)):
            messagebox.showerror("Error", "Please enter affordable infos")
            self.boo = False
        else:
            messagebox.showinfo("Submition done", "Thank you")
            self.boo = True
    def callback(self):
       #print("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
       if self.boo:
            f = open("PrivatData.txt", "w+")
            f.write("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
    def popup(self):
        self.root.quit()
        PopUp()
    def __init__(self):
            self.root = Tk()
            self.root.title("Your privat details")
            Label(self.root, text="Your Name").grid(row = 0, padx = 12, pady=5)
            Label(self.root, text="Password").grid(row=1, padx=12, pady=5)
            Label(self.root, text="Email").grid(row=2, padx=12, pady=5)
            self.e = Entry(self.root)
            self.e2 = Entry(self.root)
            self.e3= Entry(self.root)
            self.e.grid(row=0,column=1,columnspan=2)
            self.e2.grid(row=1, column=1, columnspan=2)
            self.e3.grid(row=2, column=1, columnspan=2)
            self.e.focus_set()
            self.show= Button(self.root, text="Submit", command=lambda:[self.thanx(),self.callback(),self.popup()])
            self.quit = Button(self.root,text="Quit", command = self.root.quit)
            self.show.grid(row=3, column=1, pady=4)
            self.quit.grid(row=3, column=2, sticky = W, pady=4)
            self.root.geometry("230x140")
            self.root.configure(background= "#65499c")
            self.root.mainloop()


class PopUp():
    def __init__(self):
        super().__init__()
        self.pop = Tk()
        self.pop.title("Next Step")
        self.pop.geometry("500x500")
        self.pop.mainloop()

if __name__ == "__main__":
    app= MyForm()

Как видите, после нажатия кнопки «Отправить» вызывается одна функция, которая вызывает класс PopUp.Но это явно не правильный путь.Так какие улучшения?

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