2015-01-26 63 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循環,每次按下按鈕時只檢查一次,並相應地作出響應。