登录后切换帧

输入正确的登录名和密码后,我试图切换到新的框架。 不幸的是,一旦我输入所有详细信息,什么也不会发生。 不确定如何强制其打开新框架。 我可以在没有登录位的框架之间进行切换,但是不知道将登录功能附加到它上

 from tkinter import *
import tkinter.messagebox as tm
import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.switch_frame(LoginFrame)

    def switch_frame(self,frame_class):
        """Destroys current frame and replaces it with a new one."""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()


class LoginFrame(tk.Frame):
    def __init__(self,parent):
        super().__init__(parent)


        self.label_username = Label(self,text="username")
        self.label_password = Label(self,text="Password")

        self.entry_username = Entry(self)
        self.entry_password = Entry(self,show="*")

        self.label_username.grid(row=0,sticky=E)
        self.label_password.grid(row=1,sticky=E)
        self.entry_username.grid(row=0,column=1)
        self.entry_password.grid(row=1,column=1)



        self.logbtn = Button(self,text="Login",command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)



    def _login_btn_clicked(self):
        # print("Clicked")
        username = self.entry_username.get()
        password = self.entry_password.get()

        # print(username,password)

        if username == "abc" and password == "123":
            lambda: parent.switch_frame(Pageone)
        else:
            tm.showerror("Login error","Incorrect username or password")

class Pageone(tk.Frame):
    def __init__(self,parent):
        tk.Frame.__init__(self,parent)
        tk.Label(self,text="This is page one").pack(side="top",fill="x",pady=10)
        tk.Button(self,text="Return to login page",command=lambda: parent.switch_frame(LoginFrame)).pack()

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()
smile2010cool123 回答:登录后切换帧

有几个问题。根本问题是这两行代码:

if username == "abc" and password == "123":
    lambda: parent.switch_frame(PageOne)

这不会导致页面切换。相反,它只是创建一个匿名函数,该函数将导致页面切换。您不想创建函数,而是要实际切换框架。在这种情况下,它应如下所示:

if username == "abc" and password == "123":
    parent.switch_frame(PageOne)

但是,parent未定义。您需要将parent保存在__init__方法中,以便可以在此处访问它。

class LoginFrame(tk.Frame):
    def __init__(self,parent):
        super().__init__(parent)
        self.parent = parent
        ...

    def _login_btn_clicked(self):
        ...
        if username == "abc" and password == "123":
            self.parent.switch_frame(PageOne)
,

像梦一样工作,感谢大家的帮助,在下面粘贴了固定代码

deleting - add submodule
本文链接:https://www.f2er.com/3151487.html

大家都在问