Вы можете использовать Frame
для окна входа в систему и скрыть его после успешного входа в систему (в функции showdata
), а затем показать другое для главного окна, и если вы используете класс, вам не нужно передавать переменные, они будут доступны с помощью self.
Попробуйте следующий пример:
from tkinter import Tk, Frame, Label, Entry, Button, Toplevel
class MyApp(object):
""""""
def __init__(self, parent):
self.root = parent
self.root.title("Main frame")
self.frame = Frame(parent)
self.frame.pack()
Label(self.frame).grid(row=0,column=0) # Add a space between top border and E-mail widget
self.em = Label(self.frame, text="E-mail")
self.em.grid(row=1,column=0)
self.pd = Label(self.frame, text="Password")
self.pd.grid(row=2,column=0)
self.email = Entry(self.frame)
self.password1 = Entry(self.frame)
self.email.grid(row=1, column=1)
self.password1.grid(row=2, column=1)
self.btn = Button(self.frame, text="Log In", command=self.showdata)
self.btn.grid(row=3, column=1)
def hide(self):
self.root.withdraw()
def openFrame(self):
self.hide()
otherFrame = Toplevel()
otherFrame.geometry("400x300")
otherFrame.title("otherFrame")
handler = lambda: self.onCloseOtherFrame(otherFrame)
btn = Button(otherFrame, text="Close", command=handler)
btn.pack()
def onCloseOtherFrame(self, otherFrame):
otherFrame.destroy()
self.show()
def show(self):
self.root.update()
self.root.deiconify()
def showdata(self):
email1 = self.email.get()
password2 = self.password1.get()
print(email1 +" "+ password2)
# exec(open("scratch.py").read())
self.openFrame()
if __name__ == "__main__":
root = Tk()
root.geometry("300x100")
app = MyApp(root)
root.mainloop()