我正在嘗試通過 Tkinter 創建登錄螢屏,并且我希望訊息框在用戶輸入正確的用戶名和密碼或未正確輸入時顯示一條訊息。當我運行程式并輸入用戶名和密碼時,訊息框沒有出現。有沒有辦法解決這個問題?
from tkinter import *
from tkinter import messagebox
root = Tk()
root.geometry("300x270")
root.title("staff login")
root.resizable(False, False)
root.configure(background ="black")
label = Label(root, text = "staff log-in")
frame_heading = Frame(root)
frame_heading.grid(row=0, column=0, columnspan=2, padx=25,pady=10)
frame_entry = Frame(root)
frame_entry.grid(row=1, column=0, columnspan=2, padx=25, pady=10)
Label(frame_heading,text ="Staff log-in",
font =('Arial',16))\
.grid(row=0, column=0, padx=0, pady=5)
Label(frame_entry, text = "Username: ")\
.grid(row=2, column=0, padx=10, pady=5)
label(frame_entry, text = "Password: ")\
.grid(row=3, column=0, padx=10, pady=5)
def login():
label.config (text = "log in")
username = Entry(frame_entry, width = 15, bg = "white")
username.grid(row=2, column=1, padx=5,pady=5)
password = Entry(frame_entry, width = 15, bg = "white")
password.grid(row=3, column=1, padx=5,pady=5)
loginbutton = Button(root, text="Login",width=7,
command=login)
loginbutton.grid(row=2, column=0, padx=0, pady=5)
def loginbutton():
username = username_entry.get()
password = password_entry.get()
if (username == 'admin' and password == 'abcd1234'):
messagebox.showinfo('info', 'Correct Login')
else:
messagebox.showinfo('info', 'Invalid Login')
root.mainloop()
uj5u.com熱心網友回復:
你的代碼沒有運行,所以我不得不改變一些東西。您還擁有它,因此您必須按下登錄按鈕才能顯示用戶名和密碼框。這就是我所擁有的,我相信這就是您正在努力實作的目標。
from tkinter import *
from tkinter import messagebox
root = Tk()
root.geometry("300x270")
root.title("staff login")
root.resizable(False, False)
root.configure(background="black")
label = Label(root, text="staff log-in")
frame_heading = Frame(root)
frame_heading.grid(row=0, column=0, columnspan=2, padx=25, pady=10)
frame_entry = Frame(root)
frame_entry.grid(row=1, column=0, columnspan=2, padx=25, pady=10)
Label(frame_heading, text="Staff log-in",
font=('Arial', 16)).grid(row=0, column=0, padx=0, pady=5)
Label(frame_entry, text="Username: ").grid(row=2, column=0, padx=10, pady=5)
Label(frame_entry, text="Password: ").grid(row=3, column=0, padx=10, pady=5)
# def login(): -- I commented this line because the username and password entries should automatically populate
# -- The way you were doing it before these did not populate until after you pressed login
label.config(text="log in")
username = Entry(frame_entry, width=15, bg="white")
username.grid(row=2, column=1, padx=5, pady=5)
password = Entry(frame_entry, width=15, bg="white")
password.grid(row=3, column=1, padx=5, pady=5)
# Added the lambda command to the login function you wrote, which was never called anywhere else in the script.
loginbutton = Button(root, text="Login", width=7, command=lambda : loginbutton(username, password))
loginbutton.grid(row=2, column=0, padx=0, pady=5)
def loginbutton(username_entry, password_entry):
username = username_entry.get()
password = password_entry.get()
if (username == 'admin' and password == 'abcd1234'):
messagebox.showinfo('info', 'Correct Login')
else:
messagebox.showinfo('info', 'Invalid Login')
root.mainloop()
uj5u.com熱心網友回復:
問題
您的代碼中存在多個問題,主要圍繞提供錯誤的變數名稱。一些主要問題是:
- 在loginbutton您嘗試訪問
username_entry和password_entry變數尚未建立widget時你沒有username = Entry(...)和password = Entry(...) - 在
command這是怎么回事時,“登錄”按鈕,點擊被定義為被呼叫login這是創建用戶名和密碼進入和登錄按鈕功能相同
解決方案
我相信你想要這樣的東西:
from tkinter import *
from tkinter import messagebox
def checkLogin():
username = username_entry.get()
password = password_entry.get()
if (username == 'admin' and password == 'abcd1234'):
messagebox.showinfo('info', 'Correct Login')
else:
messagebox.showinfo('info', 'Invalid Login')
root = Tk()
root.geometry("300x270")
root.title("staff login")
root.resizable(False, False)
root.configure(background ="black")
label = Label(root, text = "staff log-in")
frame_heading = Frame(root)
frame_heading.grid(row=0, column=0, columnspan=2, padx=25,pady=10)
frame_entry = Frame(root)
frame_entry.grid(row=1, column=0, columnspan=2, padx=25, pady=10)
Label(frame_heading,text ="Staff log-in",
font =('Arial',16))\
.grid(row=0, column=0, padx=0, pady=5)
Label(frame_entry, text = "Username: ")\
.grid(row=2, column=0, padx=10, pady=5)
Label(frame_entry, text = "Password: ")\
.grid(row=3, column=0, padx=10, pady=5)
label.config (text = "log in")
username_entry = Entry(frame_entry, width = 15, bg = "white")
username_entry.grid(row=2, column=1, padx=5,pady=5)
password_entry = Entry(frame_entry, width = 15, bg = "white")
password_entry.grid(row=3, column=1, padx=5,pady=5)
loginbutton = Button(root, text="Login",width=7,
command=checkLogin)
loginbutton.grid(row=2, column=0, padx=0, pady=5)
root.mainloop()
主要的一點是,在創建登錄按鈕時,指定command要checkLogin哪個是你執行任何檢查用戶點擊登錄按鈕后的功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401843.html
上一篇:這個回圈可以在串列理解中完成嗎?
下一篇:如何一次讀取一個空格分隔的值?
