如何在没有按钮单击python tkinter的情况下进入另一个页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有按钮单击python tkinter的情况下进入另一个页面相关的知识,希望对你有一定的参考价值。

所以,我正在使用tkinter在python中创建一个登录系统,我希望它在验证了电子邮件和密码后移动到另一个页面。我发现这样做的唯一方法是使用按钮单击命令。我只希望在验证电子邮件和密码后转到下一页。提前致谢。

    from tkinter import *


    class login:

        def __init__(self, master, *args, **kwargs):

            self.emailGranted = False
            self.passwordGranted = False

            self.attempts = 8

            self.label_email = Label(text="email:", font=('Serif', 13))
            self.label_email.grid(row=0, column=0, sticky=E)

            self.label_password = Label(text="password:", font=('Serif', 13))
            self.label_password.grid(row=1, column=0, sticky=E)

            self.entry_email = Entry(width=30)
            self.entry_email.grid(row=0, column=1, padx=(3, 10))

            self.entry_password = Entry(width=30, show="•")
            self.entry_password.grid(row=1, column=1, padx=(3, 10))

            self.login = Button(text="Login", command=self.validate)
            self.login.grid(row=2, column=1, sticky=E, padx=(0, 10), pady=(2, 2))

            self.label_granted = Label(text="")
            self.label_granted.grid(row=3, columnspan=3, sticky=N+E+S+W)

        def validate(self):

            self.email = self.entry_email.get()
            self.password = self.entry_password.get()

            if self.email == "email":
                self.emailGranted = True

            else:
                self.emailGranted = False
                self.label_granted.config(text="wrong email")
                self.attempts -= 1
                self.entry_email.delete(0, END)
                if self.attempts == 0:
                    root.destroy()

            if self.password == "password":
                self.passwordGranted = True

            else:
                self.passwordGranted = False
                self.label_granted.config(text="wrong password")
                self.attempts -= 1
                self.entry_password.delete(0, END)
                if self.attempts == 0:
                    root.destroy()

            if self.emailGranted is False and self.passwordGranted is False:
                self.label_granted.config(text="wrong email and password")

            if self.emailGranted is True and self.passwordGranted is True:
                self.label_granted.config(text="access granted")
                // I want it to move on to PageOne here but I'm not sure how

    class PageOne:

        def __init__(self, master, *args, **kwargs):

            Button(text="it works").grid(row=0, column=0)

    if __name__ == "__main__":

        root = Tk()
        root.resizable(False, False)
        root.title("login")
        login(root)
        root.mainloop()
答案

如果你想这样做,一旦有一个有效的电子邮件它就会继续运行,那么你想让一个函数获得一个参数(电子邮件)并返回一个布尔值(True或False)。要做到这一点,你需要这样做:

def function(email):
   return email == <something>

为了让它在键入时反复检查,可以在循环中使用root.update()而不是root.mainloop(),这样你就可以这样做:

while function(entryWidget.get()):
   #all the configs for text
   root.update()
#let them to the next page

这有用吗?

另一答案

我没有使用过tkinter,但是移动到新页面就像是一个动作。并且在事件发生时执行操作。在您的情况下,事件是在电子邮件和密码通过验证之后。因此,您需要在验证成功后添加逻辑以移至新页面。

BTW为什么要这样做?为什么不让用户按下按钮呢?

以上是关于如何在没有按钮单击python tkinter的情况下进入另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在不单击tkinter python的情况下读取单选按钮值

单击后更新按钮的位置? (Tkinter Python GUI)

如何在 Python Tkinter 中创建一个按钮以将整数变量增加 1 并显示该变量?

在 Python Tkinter 中按下按钮后如何清除窗口?

Python3 tkinter基础 Button command 单击按钮 在console中打印文本

如何在没有按钮的情况下关闭tkinter窗口而不完全关闭Python?