一、说明
- Python Tkinter multiple windows
- 使用多个窗口的 Python Tkinter 用户注册
- Python Tkinter 多页访问验证
Table of Contents
二、多窗口问题
首先,我们将学习如何使用 Python Tkinter 创建多个窗口。
我们正在了解多个窗口的工作原理。通过多个窗口,我们的意思是将一个页面与其他页面连接起来,这些页面相互链接并在新选项卡中打开,甚至将我们重定向到新页面。
代码:
import tkinter as tk
def New_Window():
Window = tk.Toplevel()
canvas = tk.Canvas(Window, height=HEIGHT, width=WIDTH)
canvas.pack()
HEIGHT = 300
WIDTH = 500
ws = tk.Tk()
ws.title("Python Guides")
canvas = tk.Canvas(ws, height=HEIGHT, width=WIDTH)
canvas.pack()
button = tk.Button(ws, text="Click ME", bg='White', fg='Black',
command=lambda: New_Window())
button.pack()
ws.mainloop()
以下是给定代码的一些主要亮点。
- WS 用于根窗口
- 高度 = 画布小组件的高度。
- 宽度 = 宽度用于画布小部件。
- BG用于背景颜色。
- FG 用于前景色。
- 啧啧。Button() 用于添加按钮。
输出:
在上面的代码中,我们在屏幕底部制作了一个简单的按钮。通过单击该按钮,将打开一个新窗口。
输出:
正如我们在上面的输出中看到的,单击“单击我”按钮将打开一个新窗口。结果如下所示。
最终输出
三、使用多个窗口的 Python Tkinter 用户注册
在下一节中,我们将了解使用多个窗口注册的Python Tkinter用户。
我们必须制作一个注册表,在其中我们制作了包含与姓名、电子邮件、密码相关的信息的块列。它还使用 OTP 验证电子邮件,以检查真实用户是否有健康的数据库。
代码:
我们在此代码中使用的一些库是smtplib,sqlite3和messagebox,random,EmailMessage,Tkinter和email.message库。这里还使用了一些标签、字段、条目和按钮。
- sqllite3.connect() 用于数据库连接
- Label() 用于在此用户中显示文本只是视图不交互。
- Entry() 是一个单行文本框,用于接受来自用户的值。
from tkinter import *
import re
from tkinter import messagebox
import sqlite3
import random
from email.message import EmailMessage
import smtplib
<strong># Database</strong>
try:
con = sqlite3.connect('website.db')
con.execute('''create table if not exists users(
fname text not null,
lname text not null,
email text not null,
password text not null);
''')
con.close()
except Exception as ep:
messagebox.showerror('', ep)
ws = Tk()
ws.title('Python Guides')
ws.geometry('500x400')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)
<strong># functions</strong>
def otp_gen():
pass
cpy = ''
def sendOtp():
otp_no = ''
for _ in range(4):
r = random.randint(0, 9)
otp_no += str(r)
global cpy
cpy += otp_no
sender = "codetestingemail6@gmail.com"
reciever = em.get()
password = "Cute...pie@0823"
msg_body = f'otp is {cpy}'
msg = EmailMessage()
msg['subject'] = 'OTP'
msg['from'] = sender
msg['to'] = reciever
msg.set_content(msg_body)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(sender,password)
smtp.send_message(msg)
print(cpy)
return cpy
def clr():
fname.delete(0, END)
lname.delete(0, END)
em.delete(0, END)
pwd.delete(0, END)
def submit():
enteredOtp = otp.get()
expectedOtp = cpy
print(expectedOtp)
fname_check = fname.get()
lname_check = lname.get()
em_check = em.get()
pwd_check = pwd.get()
otp_check = otp.get()
check_count = 0
if fname_check == "":
warn = "First name can't be empty!"
else:
check_count += 1
if lname_check == "":
warn = "Last name can't be empty!"
else:
check_count += 1
if em_check == "":
warn = "Email can't be empty!"
else:
check_count += 1
if pwd_check == "":
warn = "Password can't be empty!"
else:
check_count += 1
if otp_check == "":
warn = "Otp can't be empty!"
else:
check_count += 1
# if fname_check, lname_check, pwd_check, otp_check:
if check_count == 5:
if (expectedOtp == enteredOtp):
con = sqlite3.connect('website.db')
c = con.cursor()
c.execute("insert into users VALUES (:fname, :lname, :em, :pwd)",{
'fname': fname.get(),
'lname': lname.get(),
'em': em.get(),
'pwd': pwd.get()
})
con.commit()
ws.destroy()
import app
else:
messagebox.showerror('','Incorrect Otp')
else:
messagebox.showerror('', warn)
<strong># frames</strong>
frame = Frame(ws, padx=20, pady=20)
frame.pack(expand=True)
<strong># labels</strong>
Label(
frame,
text="Create New Account",
font=("Times", "24", "bold")
).grid(row=0, columnspan=3, pady=10)
Label(
frame,
text='First Name',
font=("Times", "14")
).grid(row=1, column=0, pady=5)
Label(
frame,
text='Last Name',
font=("Times", "14")
).grid(row=2, column=0, pady=5)
Label(
frame,
text='Email Address',
font=("Times", "14")
).grid(row=3, column=0, pady=5)
Label(
frame,
text='Password',
font=("Times", "14")
).grid(row=4, column=0, pady=5)
Label(
frame,
text='Enter OTP',
font=("Times", "14")
).grid(row=5, column=0, pady=5)
<strong># Entry</strong>
fname = Entry(frame, width=30)
lname = Entry(frame, width=30)
em = Entry(frame, width=30)
pwd = Entry(frame, width=30)
otp = Entry(frame, width=30)
fname.grid(row=1, column=1)
lname.grid(row=2, column=1)
em.grid(row=3, column=1)
pwd.grid(row=4, column=1)
otp.grid(row=5, column=1)
<strong># button </strong>
clr = Button(frame, text="Clear", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=clr)
reg = Button(frame, text="Register", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=submit)
ext = Button(frame, text="Exit", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=lambda:ws.destroy())
otpp = Button(frame, text="verify email", padx=10, relief=RAISED, font=("Times", "10", "bold"), command=sendOtp)
clr.grid(row=6, column=0, pady=20)
reg.grid(row=6, column=1, pady=20)
ext.grid(row=6, column=2, pady=20)
otpp.grid(row=5, column=2)
ws.mainloop()
输出:
在上面的代码中,我们制作了一个注册表单,其中包含标签、按钮和条目等详细信息,该代码与数据库连接连接,该数据库连接添加真正的用户在此处注册。
新帐户输出
在下面的输出中,我们填写所有详细信息并验证电子邮件以进一步操作。
使用多个窗口的 Python Tkinter 用户注册
当我们检查并随机输入OTP时,我们可以看到显示一个错误,并显示消息“不正确的OTP”。这意味着在我们提供注册时使用的正确 OTP 和电子邮件地址之前,我们无法进一步行动。
Python tkinter 中的多个窗口
四、Python Tkinter 多页访问验证
在下一节中,我们将了解多页访问验证。
通过访问验证,我们的意思是验证用户的密码和在注册期间注册的电子邮件。我们还可以使用此代码中的创建帐户按钮注册用户。
代码:
登录 Page.py
现在,让我们看一下我们在此代码中使用的一些库是 sqlite3 和 Tkinter 库下的 messagebox。在这里,还使用了标签、字段、条目和按钮。
- un 用于用户名
- PD用于密码
- messagebox.showerror() 用于输入一些不正确的用户名和密码时,它会自动显示错误。
from tkinter import *
from tkinter import messagebox
import sqlite3
try:
con = sqlite3.connect('website.db')
c = con.cursor()
c.execute("Select * from users")
for i in c.fetchall():
un = i[2]
pd = i[3]
except Exception as ep:
messagebox.showerror('', ep)
ws = Tk()
ws.title('Python Guides')
ws.geometry('500x400')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)
def createAccount():
ws.destroy()
import register
def submit():
u = uname.get()
p = pwd.get()
check_counter=0
if u == "":
warn = "Username can't be empty"
else:
check_counter += 1
if p == "":
warn = "Password can't be empty"
else:
check_counter += 1
if check_counter == 2:
if (u == un and p == pd):
ws.destroy()
import app
else:
messagebox.showerror('', 'invalid username or password')
else:
messagebox.showerror('', warn)
<strong># frame</strong>
frame = Frame(ws, padx=20, pady=20)
frame.pack_propagate(False)
frame.pack(expand=True)
<strong># labels</strong>
Label(
frame,
text="Admin Login",
font=("Times", "24", "bold")
).grid(row=0, columnspan=3, pady=10) #..place(x=170, y=10)
Label(
frame,
text='Enter Username',
font=("Times", "14")
).grid(row=1, column=1, pady=5) #.place(x=50, y=70)
Label(
frame,
text='Enter Password',
font=("Times", "14")
).grid(row=2, column=1, pady=5) #.place(x=50, y=110)
<strong># Entry</strong>
uname = Entry(frame, width=20)
pwd = Entry(frame, width=20, show="*")
# uname.place(x=220, y=70)
# pwd.place(x=220, y=110)
uname.grid(row=1, column=2)
pwd.grid(row=2, column=2)
<strong># button</strong>
reg = Button(
frame,
text="Create Account",
padx=20, pady=10,
relief=RAISED,
font=("Times", "14", "bold"),
command=createAccount
)
sub = Button(
frame,
text="Login",
padx=20,
pady=10,
relief=RAISED,
font=("Times", "14", "bold"),
command=submit
)
reg.grid(row=3, column=1, pady=10)
sub.grid(row=3, column=2, pady=10)
ws.mainloop()
Output:
After running the above code, we got this output in which we can see labels of “enter username”, “enter password” and two-button working on different functionality.
登录输出
在下面的输出中,我们在密码部分下的用户名和密码中输入电子邮件,然后单击“登录”按钮。
登录窗口
正如我们所看到的,用户名和密码被用户输入错误,这表明它不会将我们重定向到另一个窗口或页面。
登录2.输出
App.py
下面是一些代码,这些代码可以在验证过程完成后运行另一个页面。
法典:
from tkinter import *
from tkinter import messagebox
ws = Tk()
ws.title('Python Guides')
ws.geometry('500x300')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)
# functions
def msg():
return messagebox.showinfo('', 'Life is short, \n do what you love')
def logOut():
resp = messagebox.askquestion('', 'Are you sure?')
if resp == 'yes':
ws.destroy()
else:
pass
# frames
frame = Frame(
ws,
padx=20,
pady=20
)
frame.pack(expand=True)
<strong># image </strong>
img = PhotoImage(file='img.png')
<strong># labelslo</strong>
Label(
frame,
text="Congratulations!",
font=("Times", "24", "bold")
).grid(row=0, columnspan=3)
Label(
frame,
text='Your Account is Active',
fg='green',
font=("Times", "14")
).grid(row=1, columnspan=3)
imglbl = Label(frame, image=img)
imglbl.grid(row=2, column=1)
<strong># button</strong>
exp = Button(frame, text="open>>", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=msg)
logout = Button(frame, text="Logout", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=logOut)
exp.grid(row=2 , column=1)
logout.grid(row=3, column=1)
ws.mainloop()
运行以下代码并单击“登录”按钮后,我们必须输入有效的用户名和密码。它会将我们重定向到另一个窗口并向我们显示以下消息。
此外,我们可以看到一个注销按钮,它将帮助我们退出页面。
输出
您可能还想阅读以下 Tkinter 教程。