2015-01-26 65 views
3

我正在使用TkInter在这里创建一个登录屏幕,此刻保持登录按钮在底部是多余的,并且仍然如此。我想要做的就是使用此代码:如何将TKinter与Python登录屏幕集成?

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,但绝望的帮助!

在此先感谢!

+0

你需要做出改变密码的方法,然后绑定这个方法来输入。 – Chewie 2015-01-26 18:54:18

回答

8

我扩展了你的例子。我做了一个保存你的登录窗口的类。

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。当您点击登录按钮时,该功能将被执行。在这个函数中,你取用户名和密码的值,并检查它们是否正确。此外,我没有附加任何回调到复选框。但它会与已经完成的相似。

Login prompt

+0

如果登录成功,您将如何打开主程序窗口? – 2018-02-23 16:18:04

0

您可能想要一个“登录”按钮,对不对?如果你这样做了,你可以使用按钮的command参数来绑定一个函数,当它被点击时运行。在按钮调用的函数中,您可以检查正确的用户名和密码。不要使用while循环,每次按下按钮时只检查一次,并相应地作出响应。