Python Tkinter Multiple Windows 教程
一、说明
- Python Tkinter multiple windows
- 使用多个窗口的 Python Tkinter 用户注册
- Python Tkinter 多页访问验证
Table of Contents
二、多窗口问题
首先,我们将学习如何使用 Python Tkinter 创建多个窗口。
我们正在了解多个窗口的工作原理。通过多个窗口,我们的意思是将一个页面与其他页面连接起来,这些页面相互链接并在新选项卡中打开,甚至将我们重定向到新页面。
代码:
import tkinter as tkdef New_Window():Window = tk.Toplevel()canvas = tk.Canvas(Window, height=HEIGHT, width=WIDTH)canvas.pack()HEIGHT = 300
WIDTH = 500ws = 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():passcpy = ''def sendOtp():otp_no = ''for _ in range(4):r = random.randint(0, 9)otp_no += str(r) global cpy cpy += otp_nosender = "codetestingemail6@gmail.com"reciever = em.get()password = "Cute...pie@0823"msg_body = f'otp is {cpy}'msg = EmailMessage()msg['subject'] = 'OTP' msg['from'] = sendermsg['to'] = recievermsg.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 cpydef clr():fname.delete(0, END)lname.delete(0, END)em.delete(0, END)pwd.delete(0, END)def submit():enteredOtp = otp.get()expectedOtp = cpyprint(expectedOtp)fname_check = fname.get()lname_check = lname.get()em_check = em.get()pwd_check = pwd.get()otp_check = otp.get()check_count = 0if fname_check == "":warn = "First name can't be empty!"else:check_count += 1if lname_check == "":warn = "Last name can't be empty!"else:check_count += 1if em_check == "":warn = "Email can't be empty!"else:check_count += 1if pwd_check == "":warn = "Password can't be empty!"else:check_count += 1if 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 appelse: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 sqlite3try: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 registerdef submit():u = uname.get()p = pwd.get()check_counter=0if u == "":warn = "Username can't be empty"else:check_counter += 1if p == "":warn = "Password can't be empty"else:check_counter += 1if check_counter == 2:if (u == un and p == pd):ws.destroy()import appelse: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 messageboxws = 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 教程。
相关文章:

Python Tkinter Multiple Windows 教程
一、说明 在这个Python Tkinter教程中,我们将学习如何在Python Tkinter中创建多个窗口,我们还将介绍与多个窗口相关的不同示例。而且,我们将介绍这些主题。 Python Tkinter multiple windows使用多个窗口的 Python Tkinter 用户注册Python Tk…...

【Arduino24】8*8点阵实验
硬件准备 8*8点阵:1个 旋钮电位器:1个 面包板:1块 杜邦线:若干 硬件连线 软件程序 //定义引脚 #define xKnob_pin A0 //x轴旋钮的引脚 #define yKnob_pin A1 //y轴旋钮的引脚 const int row_pin[8] { 6, 11, 10, 3, 17, 4…...

2023年09月数据库流行度最新排名
点击查看最新数据库流行度最新排名(每月更新) 2023年09月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数…...

jenkins快速跑通helloworld任务
jenkins新建helloworld示例 左上角“新建任务” 输入名称,选择第一个创建: 可以选择众多执行脚本,这里选择shell: 随后弹出一个窗口,将下面脚本填入: #!/bin/bashecho start... for i in {1..10}doecho $i…...

win10中安装ros
参考: Windows 10上安装ROS noetic平台_windows ros noetic_高精度计算机视觉的博客-CSDN博客...

问道管理:光刻胶概念再度活跃,广信材料两连板,蓝英装备等涨停
光刻胶概念6日盘中再度活泼,截至发稿,扬帆新材、广信资料、蓝英配备“20cm”涨停,盛剑环境亦涨停,高盟新材涨超9%,同益股份、容大感光涨超5%。 值得注意的是,广信资料已连续两个交易日涨停。公司近来在成绩…...

InstructPix2Pix(CVPR2023)-图像编辑论文解读
文章目录 1.摘要2.背景3.算法3.1 生成多模态训练集3.1.1生成指令及成对caption3.1.2 依据成对的caption生成成对的图像 3.2 InstructPix2Pix 4.实验结果4.1基线比较4.2消融实验 5.结论 论文: 《InstructPix2Pix: Learning to Follow Image Editing Instructions》 …...

基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测
基于神经网络结合紫外差分光谱的二氧化硫浓度定量预测 前言一、代码运行1. 解压数据2. 导包3. 读取数据4. 构建网络5. 设置优化器6. 模型训练7. 可视化loss8. 模型验证 二、结果展示三、总结作者简介 前言 二氧化硫(SO2)是一种常见的环境污染物ÿ…...

一个新工具 nolyfill
名字的意思, 我自己的理解 no(po)lyfill 正如它的名字, 不要再用补丁了, 当然这里说的是过时的补丁。 polyfill 是补丁的意思 为什么要用这个插件 文档原文: 当您通过安装最新的 Node.js LTS 来接受最新的功能和安全修复时,像eslint-plugin-import、…...

vue的第2篇 开发环境vscode的安装以及创建项目空间
一 环境的搭建 1.1常见前端开发ide 1.2 安装vs.code 1.下载地址:Visual Studio Code - Code Editing. Redefined 2.进行安装 1.2.1 vscode的中文插件安装 1.在搜索框输入“chinese” 2.安装完成重启,如下变成中文 1.2.2 修改工作区的颜色 选中[浅色]…...

Java之包装类的详细解析
包装类 5.1 概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使…...

SpringBoot项目防止接口重复提交(简单拦截器实现方案)
基于SpringBoot框架来开发业务后台项目时,接口重复提交是一个常见的问题。为了避免这个问题,我们可以通过自定义拦截器实现一个后台拦截接口重复提交的功能,本文将介绍如何使用基于SpringBoot实现这个功能。 首先,我们需要引入一…...

C语言 数据结构与算法 I
C语言-数据结构与算法 C语言基础 因为之前写算法都是用C,也有了些C基础,变量常量数据类型就跳过去吧。 首先是环境,学C时候用Clion,C语言也用它写吧~ 新建项目,选C执行文件,语言标准。。。就先默认C99吧…...

PHP指定时间戳/日期加一天,一年,一周,一月
PHP指定时间戳加上1天,1周,1月,一年其实是不需要用上什么函数的!指定时间戳本身就是数字整型,我们只需要再计算1天,1周它的秒数相加即可! 博主搜索php指定时间戳加一天一年,结果许多…...

前端框架 vue-admin-template的搭建运行
一介绍 1.1 下载地址 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 1.2 node.js的安装 地址下载node.js 1.6版本 CNPM Binari…...

Git—版本控制系统
git版本控制系统 1、什么是版本控制2、常见的版本控制工具3、版本控制分类3.1、本地版本控制3.2、集中版本控制 SVN3.3、分布式版本控制 Git 4、Git与SVN的主要区别5、Git环境配置6、启动Git7、常用的Linux命令8、Git配置9、设置用户名与邮箱(用户标识,必…...

【MySQL基础|第一篇】——谈谈SQL中的DDL语句
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 前言ÿ…...

移动安全测试框架-MobSF WINDOWS 环境搭建
安装python python-3.11.5-amd64.exe 安装Win64OpenSSL-3_1_2.exe 安装VisualStudioSetup.exe github下载安装包 https://github.com/MobSF/Mobile-Security-Framework-MobSF/archive/refs/heads/master.zip GitHub - MobSF/Mobile-Security-Framework-MobSF: Mobile Secur…...

QT连接OpenCV库完成人脸识别
1.相关的配置 1> 该项目所用环境:qt-opensource-windows-x86-mingw491_opengl-5.4.0 2> 配置opencv库路径: 1、在D盘下创建一个opencv的文件夹,用于存放所需材料 2、在opencv的文件夹下创建一个名为:opencv3.4-qt-intall 文…...

使用 ElasticSearch 作为知识库,存储向量及相似性搜索
一、ElasticSearch 向量存储及相似性搜索 在当今大数据时代,快速有效地搜索和分析海量数据成为了许多企业和组织的重要需求。Elasticsearch 作为一款功能强大的分布式搜索和分析引擎,为我们提供了一种优秀的解决方案。除了传统的文本搜索,El…...

视频图像处理算法opencv在esp32及esp32s3上面的移植,也可以移植openmv
opencv在esp32及esp32s3上面的移植 Opencv简介 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,它轻量级而且高效——由一系列 C 函数和少量…...

2. postgresql并行扫描(1)——pg强制走并行扫描建表及参数配置
转载自:https://developer.aliyun.com/article/700370 1. 参数设置 1.1 postgresql.conf中修改 # 1、总的可开启的WORKER足够大 max_worker_processes 128# 2、所有会话同时执行并行计算的并行度足够大 max_parallel_workers64# 3、单个QUERY中并行计算NODE开…...

【C++】动态内存管理
【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为: mallo…...

MATLAB R2023a完美激活版(附激活补丁)
MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件,它为Mac用户提供了强大的工具和功能,用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能: 软件下载:MATLAB R2023a完美激活版 …...

垃圾回收 - 标记压缩算法
压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先,这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…...

Vue中过滤器如何使用?
过滤器是对即将显示的数据做进⼀步的筛选处理,然后进⾏显示,值得注意的是过滤器并没有改变原来 的数据,只是在原数据的基础上产⽣新的数据。过滤器分全局过滤器和本地过滤器(局部过滤器)。 目录 全局过滤器 本地过滤器…...

【爬虫】7.4. 字体反爬案例分析与爬取实战
字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例,该案例将真实的数据隐藏到字体文件里,即使我们获取了页面源代码,也无法直接提取数据的真实值。 1. 案例介绍 案例网…...

Linux cat 的作用
Linux中的cat命令用于连接文件并打印到标准输出设备(通常是终端)。 它的主要作用有以下几点: 查看文件内容:cat命令可用于查看文本文件的内容,将文件的内容从第一行到最后一行打印到终端。 合并文件:cat命…...

Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
转载:电脑知识收藏夹 Blog Archive Windows中的命令行提示符里的Start命令执行路径包含空格时的问题 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题),第一行Start会成功执行,跳出记事本程…...

【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)
前言 今天,小编我也要进入计算机网络的整个内容,虽然这个计算机网络的内容在考研部分中占比比较小,有些人不把这一部分当成重点,这种想法是错误的。我觉得考研的这四个内容都是非常重要的,我们需要进行全力以赴的对待每…...