我正在創建一個登錄系統,但我有一個我不知道如何處理的錯誤,情況是這樣的:我希望每個用戶都能夠在使用加密和不使用加密之間進行選擇。例如,某人輸入了正確的登錄資訊,但該人忘記選擇訊息型別,并且當該人按下 Enter 按鈕時,他們會收到一個錯誤,提示他們忘記選擇訊息型別。我該如何實施?代碼如下:
from tkinter import messagebox
from tkinter import *
window = Tk()
window.title('Login')
window.geometry('320x200')
window.resizable(True, True)
name = StringVar()
password = StringVar()
def crypt():
r = (lis.get(lis.curselection()))
c = (lis.get(lis.curselection()))
string_name = name.get()
string_password = password.get()
#r = (lis.get(lis.curselection()))
#c = (lis.get(lis.curselection()))
if string_name == 'John':
if string_password == '6789':
if r == 'Use encrypted':
window.after(1000, lambda: window.destroy())
print('Hello.')
if string_name == 'John':
if string_password == '6789':
if r == 'Use decrypted':
window.after(1000, lambda: window.destroy())
print('Hello bro!')
if string_name not in 'John':
messagebox.showerror('Error', 'Error')
elif string_password not in '6789':
messagebox.showerror('Error', 'Error')
elif r not in r:
messagebox.showerror('Error', 'Oops, please crypt message') #This Error
elif string_name == 'John':
messagebox.showerror('Error', 'Error')
elif string_password == '6789':
messagebox.showerror('Error', 'Error')
entry = Entry(window, textvariable=name, width=10)
entry.grid(column=1, pady=7, padx=4)
label = Label(window, text='Enter name: ')
label.grid(row=0, padx=1)
entry1 = Entry(window, textvariable=password, width=10, show='*')
entry1.grid(column=1, pady=7, padx=2)
label1 = Label(window, text='Enter password: ')
label1.grid(row=1, padx=1)
listbox = Listbox(window, selectmode=SINGLE, width=12, height=2)
listbox.grid(column=1, row=2, pady=7, padx=2)
r = ['Use encrypted']
c = ['Use decrypted']
lis = Listbox(window, selectmode=SINGLE, width=10, height=2)
lis.grid(column=1, row=2, pady=7, padx=2)
for i in r:
lis.insert(END, i)
for i in c:
lis.insert(END, i)
label_crypto = Label(window, text='Encrypted/decrypted message: ', bg='black', fg='red')
label_crypto.grid(row=2)
button = Button(window, text='Enter', command=crypt)
button.grid(pady=30)
window.mainloop()
uj5u.com熱心網友回復:
正如我在評論中所建議的,改進變數的名稱將更好地讓您區分它們。
下面的代碼使用 try-catch 塊來檢測用戶尚未從串列框中選擇專案。如果您嘗試在尚未選擇的情況下從串列中獲取所選專案,Tkinter 將引發錯誤。
from tkinter import messagebox
from tkinter import *
import _tkinter
window = Tk()
window.title('Login')
window.geometry('320x200')
window.resizable(True, True)
name = StringVar()
password = StringVar()
def crypt():
try:
user_encryption_selection = (encryption_listbox.get(encryption_listbox.curselection()))
except _tkinter.TclError:
messagebox.showerror('Error','User has not selected an encryption type')
return
string_name = name.get()
string_password = password.get()
if string_name == 'John':
if string_password == '6789':
if user_encryption_selection == 'Use decrypted':
window.after(1000, lambda: window.destroy())
print('Hello bro!')
else:
messagebox.showerror('Error', 'Error Password')
else:
messagebox.showerror('Error', 'Invalid Username')
entry = Entry(window, textvariable=name, width=10)
entry.grid(column=1, pady=7, padx=4)
label = Label(window, text='Enter name: ')
label.grid(row=0, padx=1)
entry1 = Entry(window, textvariable=password, width=10, show='*')
entry1.grid(column=1, pady=7, padx=2)
label1 = Label(window, text='Enter password: ')
label1.grid(row=1, padx=1)
listbox = Listbox(window, selectmode=SINGLE, width=12, height=2)
listbox.grid(column=1, row=2, pady=7, padx=2)
encryption_options = ['Use encrypted','Use decrypted']
encryption_listbox = Listbox(window, selectmode=SINGLE, width=10, height=2)
encryption_listbox.grid(column=1, row=2, pady=7, padx=2)
for i in encryption_options:
encryption_listbox.insert(END, i)
label_crypto = Label(window, text='Encrypted/decrypted message: ', bg='black', fg='red')
label_crypto.grid(row=2)
button = Button(window, text='Enter', command=crypt)
button.grid(pady=30)
window.mainloop()
我還洗掉了一些不必要的代碼。您的目標應該是只檢查一次用戶名/密碼/加密值,而不是在單獨的 if/elif/else 條件中多次檢查
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/356593.html
上一篇:檔案加密時Tkinter滯后
下一篇:如何從Tk視窗中洗掉一組條目?
