• Python Tkinter Multiple Windows 教程


    一、说明

             在这个Python Tkinter教程中,我们将学习如何在Python Tkinter中创建多个窗口,我们还将介绍与多个窗口相关的不同示例。而且,我们将介绍这些主题。
    • Python Tkinter multiple windows
    • 使用多个窗口的 Python Tkinter 用户注册
    • Python Tkinter 多页访问验证

    Table of Contents

    二、多窗口问题

            首先,我们将学习如何使用 Python Tkinter 创建多个窗口

            我们正在了解多个窗口的工作原理。通过多个窗口,我们的意思是将一个页面与其他页面连接起来,这些页面相互链接并在新选项卡中打开,甚至将我们重定向到新页面。

            代码

    1. import tkinter as tk
    2. def New_Window():
    3. Window = tk.Toplevel()
    4. canvas = tk.Canvas(Window, height=HEIGHT, width=WIDTH)
    5. canvas.pack()
    6. HEIGHT = 300
    7. WIDTH = 500
    8. ws = tk.Tk()
    9. ws.title("Python Guides")
    10. canvas = tk.Canvas(ws, height=HEIGHT, width=WIDTH)
    11. canvas.pack()
    12. button = tk.Button(ws, text="Click ME", bg='White', fg='Black',
    13. command=lambda: New_Window())
    14. button.pack()
    15. ws.mainloop()

            以下是给定代码的一些主要亮点。

    • WS 用于根窗口
    • 高度 = 画布小组件的高度。
    • 宽度 = 宽度用于画布小部件。
    • BG用于背景颜色。
    • FG 用于前景色。
    • 啧。Button() 用于添加按钮。

            输出:

            在上面的代码中,我们在屏幕底部制作了一个简单的按钮。通过单击该按钮,将打开一个新窗口。

    Python Tkinter Multiple Window

            输出:

            正如我们在上面的输出中看到的,单击“单击我”按钮将打开一个新窗口。结果如下所示。

    Python Tkinter 多窗口示例

    最终输出

     

    三、使用多个窗口的 Python Tkinter 用户注册

            在下一节中,我们将了解使用多个窗口注册的Python Tkinter用户。

            我们必须制作一个注册表,在其中我们制作了包含与姓名、电子邮件、密码相关的信息的块列。它还使用 OTP 验证电子邮件,以检查真实用户是否有健康的数据库。

            代码:

            我们在此代码中使用的一些库是smtplibsqlite3messageboxrandomEmailMessageTkinteremail.message库。这里还使用了一些标签、字段、条目和按钮。

    • sqllite3.connect() 用于数据库连接
    • Label() 用于在此用户中显示文本只是视图不交互。
    • Entry() 是一个单行文本框,用于接受来自用户的值。
    1. from tkinter import *
    2. import re
    3. from tkinter import messagebox
    4. import sqlite3
    5. import random
    6. from email.message import EmailMessage
    7. import smtplib
    8. # Database
    9. try:
    10. con = sqlite3.connect('website.db')
    11. con.execute('''create table if not exists users(
    12. fname text not null,
    13. lname text not null,
    14. email text not null,
    15. password text not null);
    16. ''')
    17. con.close()
    18. except Exception as ep:
    19. messagebox.showerror('', ep)
    20. ws = Tk()
    21. ws.title('Python Guides')
    22. ws.geometry('500x400')
    23. ws.config(bg="#447c84")
    24. ws.attributes('-fullscreen',True)
    25. # functions
    26. def otp_gen():
    27. pass
    28. cpy = ''
    29. def sendOtp():
    30. otp_no = ''
    31. for _ in range(4):
    32. r = random.randint(0, 9)
    33. otp_no += str(r)
    34. global cpy
    35. cpy += otp_no
    36. sender = "codetestingemail6@gmail.com"
    37. reciever = em.get()
    38. password = "Cute...pie@0823"
    39. msg_body = f'otp is {cpy}'
    40. msg = EmailMessage()
    41. msg['subject'] = 'OTP'
    42. msg['from'] = sender
    43. msg['to'] = reciever
    44. msg.set_content(msg_body)
    45. with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    46. smtp.login(sender,password)
    47. smtp.send_message(msg)
    48. print(cpy)
    49. return cpy
    50. def clr():
    51. fname.delete(0, END)
    52. lname.delete(0, END)
    53. em.delete(0, END)
    54. pwd.delete(0, END)
    55. def submit():
    56. enteredOtp = otp.get()
    57. expectedOtp = cpy
    58. print(expectedOtp)
    59. fname_check = fname.get()
    60. lname_check = lname.get()
    61. em_check = em.get()
    62. pwd_check = pwd.get()
    63. otp_check = otp.get()
    64. check_count = 0
    65. if fname_check == "":
    66. warn = "First name can't be empty!"
    67. else:
    68. check_count += 1
    69. if lname_check == "":
    70. warn = "Last name can't be empty!"
    71. else:
    72. check_count += 1
    73. if em_check == "":
    74. warn = "Email can't be empty!"
    75. else:
    76. check_count += 1
    77. if pwd_check == "":
    78. warn = "Password can't be empty!"
    79. else:
    80. check_count += 1
    81. if otp_check == "":
    82. warn = "Otp can't be empty!"
    83. else:
    84. check_count += 1
    85. # if fname_check, lname_check, pwd_check, otp_check:
    86. if check_count == 5:
    87. if (expectedOtp == enteredOtp):
    88. con = sqlite3.connect('website.db')
    89. c = con.cursor()
    90. c.execute("insert into users VALUES (:fname, :lname, :em, :pwd)",{
    91. 'fname': fname.get(),
    92. 'lname': lname.get(),
    93. 'em': em.get(),
    94. 'pwd': pwd.get()
    95. })
    96. con.commit()
    97. ws.destroy()
    98. import app
    99. else:
    100. messagebox.showerror('','Incorrect Otp')
    101. else:
    102. messagebox.showerror('', warn)
    103. # frames
    104. frame = Frame(ws, padx=20, pady=20)
    105. frame.pack(expand=True)
    106. # labels
    107. Label(
    108. frame,
    109. text="Create New Account",
    110. font=("Times", "24", "bold")
    111. ).grid(row=0, columnspan=3, pady=10)
    112. Label(
    113. frame,
    114. text='First Name',
    115. font=("Times", "14")
    116. ).grid(row=1, column=0, pady=5)
    117. Label(
    118. frame,
    119. text='Last Name',
    120. font=("Times", "14")
    121. ).grid(row=2, column=0, pady=5)
    122. Label(
    123. frame,
    124. text='Email Address',
    125. font=("Times", "14")
    126. ).grid(row=3, column=0, pady=5)
    127. Label(
    128. frame,
    129. text='Password',
    130. font=("Times", "14")
    131. ).grid(row=4, column=0, pady=5)
    132. Label(
    133. frame,
    134. text='Enter OTP',
    135. font=("Times", "14")
    136. ).grid(row=5, column=0, pady=5)
    137. # Entry
    138. fname = Entry(frame, width=30)
    139. lname = Entry(frame, width=30)
    140. em = Entry(frame, width=30)
    141. pwd = Entry(frame, width=30)
    142. otp = Entry(frame, width=30)
    143. fname.grid(row=1, column=1)
    144. lname.grid(row=2, column=1)
    145. em.grid(row=3, column=1)
    146. pwd.grid(row=4, column=1)
    147. otp.grid(row=5, column=1)
    148. # button
    149. clr = Button(frame, text="Clear", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=clr)
    150. reg = Button(frame, text="Register", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=submit)
    151. ext = Button(frame, text="Exit", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=lambda:ws.destroy())
    152. otpp = Button(frame, text="verify email", padx=10, relief=RAISED, font=("Times", "10", "bold"), command=sendOtp)
    153. clr.grid(row=6, column=0, pady=20)
    154. reg.grid(row=6, column=1, pady=20)
    155. ext.grid(row=6, column=2, pady=20)
    156. otpp.grid(row=5, column=2)
    157. ws.mainloop()

            输出:

            在上面的代码中,我们制作了一个注册表单,其中包含标签、按钮条目等详细信息,该代码与数据库连接连接,该数据库连接添加真正的用户在此处注册。

    Python tkinter register Multiple window

            新帐户输出

            在下面的输出中,我们填写所有详细信息并验证电子邮件以进一步操作。

    使用多个窗口的 Python Tkinter 用户注册

            使用多个窗口的 Python Tkinter 用户注册

            当我们检查并随机输入OTP时,我们可以看到显示一个错误,并显示消息“不正确的OTP”。这意味着在我们提供注册时使用的正确 OTP 和电子邮件地址之前,我们无法进一步行动。

    Python tkinter 中的多个窗口

            Python tkinter 中的多个窗口

             

    四、Python Tkinter 多页访问验证

            在下一节中,我们将了解多页访问验证。

            通过访问验证,我们的意思是验证用户的密码和在注册期间注册的电子邮件。我们还可以使用此代码中的创建帐户按钮注册用户。

            代码:

            登录 Page.py

            现在,让我们看一下我们在此代码中使用的一些库是 sqlite3 和 Tkinter 库下的 messagebox。在这里,还使用了标签、字段、条目和按钮。

    • un 用于用户名
    • PD用于密码
    • messagebox.showerror() 用于输入一些不正确的用户名和密码时,它会自动显示错误。
    1. from tkinter import *
    2. from tkinter import messagebox
    3. import sqlite3
    4. try:
    5. con = sqlite3.connect('website.db')
    6. c = con.cursor()
    7. c.execute("Select * from users")
    8. for i in c.fetchall():
    9. un = i[2]
    10. pd = i[3]
    11. except Exception as ep:
    12. messagebox.showerror('', ep)
    13. ws = Tk()
    14. ws.title('Python Guides')
    15. ws.geometry('500x400')
    16. ws.config(bg="#447c84")
    17. ws.attributes('-fullscreen',True)
    18. def createAccount():
    19. ws.destroy()
    20. import register
    21. def submit():
    22. u = uname.get()
    23. p = pwd.get()
    24. check_counter=0
    25. if u == "":
    26. warn = "Username can't be empty"
    27. else:
    28. check_counter += 1
    29. if p == "":
    30. warn = "Password can't be empty"
    31. else:
    32. check_counter += 1
    33. if check_counter == 2:
    34. if (u == un and p == pd):
    35. ws.destroy()
    36. import app
    37. else:
    38. messagebox.showerror('', 'invalid username or password')
    39. else:
    40. messagebox.showerror('', warn)
    41. # frame
    42. frame = Frame(ws, padx=20, pady=20)
    43. frame.pack_propagate(False)
    44. frame.pack(expand=True)
    45. # labels
    46. Label(
    47. frame,
    48. text="Admin Login",
    49. font=("Times", "24", "bold")
    50. ).grid(row=0, columnspan=3, pady=10) #..place(x=170, y=10)
    51. Label(
    52. frame,
    53. text='Enter Username',
    54. font=("Times", "14")
    55. ).grid(row=1, column=1, pady=5) #.place(x=50, y=70)
    56. Label(
    57. frame,
    58. text='Enter Password',
    59. font=("Times", "14")
    60. ).grid(row=2, column=1, pady=5) #.place(x=50, y=110)
    61. # Entry
    62. uname = Entry(frame, width=20)
    63. pwd = Entry(frame, width=20, show="*")
    64. # uname.place(x=220, y=70)
    65. # pwd.place(x=220, y=110)
    66. uname.grid(row=1, column=2)
    67. pwd.grid(row=2, column=2)
    68. # button
    69. reg = Button(
    70. frame,
    71. text="Create Account",
    72. padx=20, pady=10,
    73. relief=RAISED,
    74. font=("Times", "14", "bold"),
    75. command=createAccount
    76. )
    77. sub = Button(
    78. frame,
    79. text="Login",
    80. padx=20,
    81. pady=10,
    82. relief=RAISED,
    83. font=("Times", "14", "bold"),
    84. command=submit
    85. )
    86. reg.grid(row=3, column=1, pady=10)
    87. sub.grid(row=3, column=2, pady=10)
    88. 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.

    Python tkinter login multiwindow

            登录输出

            在下面的输出中,我们在密码部分下的用户名和密码中输入电子邮件,然后单击“登录”按钮。

    Python Tkinterlogin1

            登录窗口

            正如我们所看到的,用户名和密码被用户输入错误,这表明它不会将我们重定向到另一个窗口或页面。

    Python tkinter 登录示例 1

            登录2.输出

            App.py

            下面是一些代码,这些代码可以在验证过程完成后运行另一个页面。

    法典:

    1. from tkinter import *
    2. from tkinter import messagebox
    3. ws = Tk()
    4. ws.title('Python Guides')
    5. ws.geometry('500x300')
    6. ws.config(bg="#447c84")
    7. ws.attributes('-fullscreen',True)
    8. # functions
    9. def msg():
    10. return messagebox.showinfo('', 'Life is short, \n do what you love')
    11. def logOut():
    12. resp = messagebox.askquestion('', 'Are you sure?')
    13. if resp == 'yes':
    14. ws.destroy()
    15. else:
    16. pass
    17. # frames
    18. frame = Frame(
    19. ws,
    20. padx=20,
    21. pady=20
    22. )
    23. frame.pack(expand=True)
    24. # image
    25. img = PhotoImage(file='img.png')
    26. # labelslo
    27. Label(
    28. frame,
    29. text="Congratulations!",
    30. font=("Times", "24", "bold")
    31. ).grid(row=0, columnspan=3)
    32. Label(
    33. frame,
    34. text='Your Account is Active',
    35. fg='green',
    36. font=("Times", "14")
    37. ).grid(row=1, columnspan=3)
    38. imglbl = Label(frame, image=img)
    39. imglbl.grid(row=2, column=1)
    40. # button
    41. exp = Button(frame, text="open>>", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=msg)
    42. logout = Button(frame, text="Logout", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=logOut)
    43. exp.grid(row=2 , column=1)
    44. logout.grid(row=3, column=1)
    45. ws.mainloop()

    运行以下代码并单击“登录”按钮后,我们必须输入有效的用户名和密码。它会将我们重定向到另一个窗口并向我们显示以下消息。

    此外,我们可以看到一个注销按钮,它将帮助我们退出页面。

    Python tkinter app multiwindow

            输出

            您可能还想阅读以下 Tkinter 教程。

  • 相关阅读:
    pod install 之后 需要重新 设置teamId
    Python爬虫入门:如何设置代理IP进行网络爬取
    idea自动添加作者、日期等信息
    Java面试题13-CountDownLatch和Semaphore的区别和底层原理
    国庆作业 10月1 用select实现服务器并发
    信息学奥赛一本通:1147:最高分数的学生姓名
    机器学习(18)---朴素贝叶斯
    读高性能MySQL(第4版)笔记04_操作系统和硬件优化
    快速上手 git
    Jmeter 自动化性能测试常见问题汇总
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/132679520