如何将 Tkinter 与 Python 登录屏幕集成?
How can I integrate Tkinter with Python log in screen?
我在这里使用 Tkinter 创建登录屏幕。目前,底部的 "keep me logged in" 按钮是多余的,并将保持不变。我想要做的是使用这段代码:
from tkinter import *
root = Tk()
label_1 = Label(root, text="Username")
label_2 = Label(root, text="Password")
entry_1 = Entry(root)
entry_2 = Entry(root)
label_1.grid(row=0, sticky=E)
label_2.grid(row=1, sticky=E)
entry_1.grid(row=0, column=1)
entry_2.grid(row=1, column=1)
checkbox = Checkbutton(root, text="Keep me logged in")
checkbox.grid(columnspan=2)
结合:
username = "john"
input("Username: ")
while not username:
if username == "john":
print("Welcome")
else:
print("User not found")
password = "password"
while not password:
input("password: ")
if password == "password":
print("Logged in")
else:
print("Incorrect password")
但是登录代码不起作用,最重要的是我不知道从哪里开始将两者相互集成。
我是 python 的新手,对 Tkinter 更是如此,但我迫切需要这种帮助!
提前致谢!
您可能想要一个 'Login' 按钮,对吧?如果这样做,您可以在使用按钮的 command
参数单击它时将函数绑定到 运行。在按钮调用的函数中,您可以检查用户名和密码是否正确。不要使用 while 循环,每次按下按钮时检查一次并相应地响应。
我扩展了你的例子。我制作了一个 class 来保存您的登录信息 window。
from tkinter import *
import tkinter.messagebox as tm
class LoginFrame(Frame):
def __init__(self, master):
super().__init__(master)
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.checkbox = Checkbutton(self, text="Keep me logged in")
self.checkbox.grid(columnspan=2)
self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clicked(self):
# print("Clicked")
username = self.entry_username.get()
password = self.entry_password.get()
# print(username, password)
if username == "john" and password == "password":
tm.showinfo("Login info", "Welcome John")
else:
tm.showerror("Login error", "Incorrect username")
root = Tk()
lf = LoginFrame(root)
root.mainloop()
很抱歉没有逐行检查那里发生的事情。我把它留给你弄清楚。这是很好的锻炼。但我会说最重要的是command = self._login_btn_clicked
。当您单击登录按钮时,将执行此功能。在此函数中,您获取用户名和密码的值,并检查它们是否正确。此外,我没有将任何回调附加到复选框。但这与已经完成的类似。
编辑:根据评论中的要求进行了编辑。
我在这里使用 Tkinter 创建登录屏幕。目前,底部的 "keep me logged in" 按钮是多余的,并将保持不变。我想要做的是使用这段代码:
from tkinter import *
root = Tk()
label_1 = Label(root, text="Username")
label_2 = Label(root, text="Password")
entry_1 = Entry(root)
entry_2 = Entry(root)
label_1.grid(row=0, sticky=E)
label_2.grid(row=1, sticky=E)
entry_1.grid(row=0, column=1)
entry_2.grid(row=1, column=1)
checkbox = Checkbutton(root, text="Keep me logged in")
checkbox.grid(columnspan=2)
结合:
username = "john"
input("Username: ")
while not username:
if username == "john":
print("Welcome")
else:
print("User not found")
password = "password"
while not password:
input("password: ")
if password == "password":
print("Logged in")
else:
print("Incorrect password")
但是登录代码不起作用,最重要的是我不知道从哪里开始将两者相互集成。 我是 python 的新手,对 Tkinter 更是如此,但我迫切需要这种帮助!
提前致谢!
您可能想要一个 'Login' 按钮,对吧?如果这样做,您可以在使用按钮的 command
参数单击它时将函数绑定到 运行。在按钮调用的函数中,您可以检查用户名和密码是否正确。不要使用 while 循环,每次按下按钮时检查一次并相应地响应。
我扩展了你的例子。我制作了一个 class 来保存您的登录信息 window。
from tkinter import *
import tkinter.messagebox as tm
class LoginFrame(Frame):
def __init__(self, master):
super().__init__(master)
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.checkbox = Checkbutton(self, text="Keep me logged in")
self.checkbox.grid(columnspan=2)
self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clicked(self):
# print("Clicked")
username = self.entry_username.get()
password = self.entry_password.get()
# print(username, password)
if username == "john" and password == "password":
tm.showinfo("Login info", "Welcome John")
else:
tm.showerror("Login error", "Incorrect username")
root = Tk()
lf = LoginFrame(root)
root.mainloop()
很抱歉没有逐行检查那里发生的事情。我把它留给你弄清楚。这是很好的锻炼。但我会说最重要的是command = self._login_btn_clicked
。当您单击登录按钮时,将执行此功能。在此函数中,您获取用户名和密码的值,并检查它们是否正确。此外,我没有将任何回调附加到复选框。但这与已经完成的类似。
编辑:根据评论中的要求进行了编辑。