中使用pack局管理器:管理器布置小部件

一、说明

        在本教程中,我们将了解如何制作登录 UI。今天的教程将重点介绍如何使用 Tkinter 的pack布局管理器。

二、设计用户界面

        什么是布局管理器?创建图形界面时,窗口中的小部件必须具有相对于彼此排列的方式。例如,可以使用微件与其他微件的相对位置或通过指定像素位置来定义其位置来完成放置微件。在 Tkinter 中,有三种类型的布局管理器--pack,place,grid .每个经理使用不同的方法来帮助我们安排小部件。要了解有关这三种方法之间差异的更多信息,请查看本教程。

        登录 UI 无处不在,在您的手机、计算机、银行等处。必须收集用户的信息并检查输入是否与系统中已有的数据匹配。

        看看上面的登录 UI 的图像。我们需要创建一个标签来显示文本“登录”。然后,添加用户的个人映像。接下来是他们可以输入用户名、密码的字段,如果他们希望计算机下次记住他们的信息,请选中一个框。由于它超出了本教程的范围,因此“忘记密码”链接只是一个占位符。

三、包布局管理器

        那么什么是包呢?最简单的思考方法是 pack() 方法将每个单独的小部件转换为一个块。每个小部件都有自己的大小,包管理器将它们组合在一起,就像使用真实的块一样。

        每个小部件都有自己的大小和参数。当然,您可以更改这些以更好地满足您的需求。一旦确定了每个小部件的大小,管理器就会完成将它们排列在窗口中的工作。

        让我们花点时间来了解包布局管理器的一些基础知识。通过 pack,管理器可以像块一样将小部件垂直堆叠在彼此的顶部。当然,你也可以通过将side参数更改为“left”或“right”来实现水平布局。您还可以更改小部件的高度、宽度和位置。下面列出了包管理器的一些更有用的参数:

  • side -- 指定小部件在窗口中的一般位置,参数为 'top'、'bottom'、'left'、'right' (默认为 'top')。
  • fill -- 您希望小部件填充父窗口的哪个方向,可以选择“x”、“y”方向或“两者”。
  • padx、pady——小部件周围的像素数,用于在其他小部件之间创建填充,用于水平或垂直填充。
  • ipadx、ipady -- 小部件内部填充使用多少像素,也用于水平或垂直填充
  • Expand——如果您希望小部件在父窗口展开时拉伸,则设置为 True。默认值为 False。
  • achor锚点——小部件放置在父小部件中的位置,由“n”、“s”、“e”、“w”或它们的某种组合指定。默认为“中心”。

    

四、使用包创建简单的 UI

         几何管理器包对于一般情况下的 GUI 非常有用。下面是一个简单的示例,说明如何使用 pack() 创建 UI 并在窗口中排列小部件。

from tkinter import *root = Tk()
root.title("Using Pack")
root.geometry("300x100")  # set starting size of window
root.config(bg="skyblue")# Example of how to arrange Button widget using pack
button1 = Button(root, text="Click me")
button1.pack(side="left")# Example of how to arrange Label widgets using pack
label1 = Label(root, text="Read me", bg="skyblue")
label1.pack(side="right")
label2 = Label(root, text="Hello", bg="purple")
label2.pack(side="right")def toggled():'''display a message to the terminal every time the check buttonis clicked'''print("The check button works.")# Example of how to arrange Checkbutton widget using pack
var = IntVar()  # Variable to check if checkbox is clicked, or not
check = Checkbutton(root, text="Click me", bg="skyblue", command=toggled, variable=var)
check.pack(side="bottom")
root.mainloop()

        首先,我们导入 Tkinter 模块并在第 1-6 行创建主窗口。root

Example of how pack can arrange widgets

        pack 如何排列小部件的示例。

        在第 9-10 行中,我们创建了第一个小部件。请注意如何使用第 10 行中的参数将小部件排列在窗口的左侧。接下来,让我们看看如果我们想要将小部件放在右侧(第 14-17 行)会发生什么。在这里,我们使用以下方式在窗口中排列两个标签。请注意如何放置在右侧。为了放置在下面,您需要创建一个小部件来包含它们。请记住,如果您使用复杂的 GUI,您的代码也会变得更加复杂。下面是登录 UI.Buttonside="left"side="right"label2label1label2label1Framepack 的示例

        最后,让我们看看底部。 Pack 会自动将小部件集中在各自的区域中。将值更改为 可以帮助将复选框向左移动一点。Checkbuttonanchor 'w'

五、创建登录 UI

        现在让我们进入登录 UI!以下是 GUI 的完整代码。

from tkinter import *root = Tk()
root.title("Login UI using Pack")
root.geometry("400x320")  # set starting size of window
root.maxsize(400, 320)  # width x height
root.config(bg="#6FAFE7")  # set background color of root windowlogin = Label(root, text="Login", bg="#2176C1", fg='white', relief=RAISED)
login.pack(ipady=5, fill='x')
login.config(font=("Font", 30))  # change font and size of label# login image
image = PhotoImage(file="redhuli_favicon.gif")
img_resize = image.subsample(5,5)
Label(root, image=img_resize, bg="white", relief=SUNKEN).pack(pady=5)def checkInput():'''check that the username and password match'''usernm = "Username301"pswrd = "Passw0rd"entered_usernm = username_entry.get()  # get username from Entry widgetentered_pswrd = password_entry.get()  # get password from Entry widgetif (usernm == entered_usernm) and (pswrd == entered_pswrd):print("Hello!")root.destroy()  else:print("Login failed: Invalid username or password.")def toggled():'''display a message to the terminal every time the check buttonis clicked'''print("The check button works.")# Username Entry
username_frame = Frame(root, bg="#6FAFE7")
username_frame.pack()Label(username_frame, text="Username", bg="#6FAFE7").pack(side='left', padx=5)username_entry = Entry(username_frame, bd=3)
username_entry.pack(side='right')# Password entry
password_frame = Frame(root, bg="#6FAFE7")
password_frame.pack()Label(password_frame, text="Password", bg="#6FAFE7").pack(side='left', padx=7)password_entry = Entry(password_frame, bd=3)
password_entry.pack(side='right')# Create Go! Buttongo_button = Button(root, text="GO!", command=checkInput, bg="#6FAFE7", width=15)go_button.pack(pady=5)# Remember me and forgot password
bottom_frame = Frame(root, bg="#6FAFE7")
bottom_frame.pack()var = IntVar()remember_me = Checkbutton(bottom_frame, text="Remember me", bg="#6FAFE7", command=toggled, variable=var)
remember_me.pack(side='left', padx=19)# The forgot password Label is just a placeholder, has no function currently
forgot_pswrd = Label(bottom_frame, text="Forgot password?", bg="#6FAFE7")
forgot_pswrd.pack(side="right", padx=19)root.mainloop()

        包布局管理器最适合简单布局。登录用户界面主要由一些相互堆叠的垂直小部件组成。所以这是一个尝试 pack() 的绝佳机会。

        首先设置根窗口、其大小和背景颜色。然后,创建前两个小部件(登录标签和用户图像)并将其放置在根窗口中。这两个是最简单的,因为它们只是两个垂直排列的小部件。

        对于用户名、密码和“记住我”区域,这些区域稍微复杂一些。因为它们是每组两个不同的小部件,每个小部件水平排列,而且因为我们已经有垂直排列的登录和图像小部件,所以我们需要为每个小部件创建一个框架小部件。这些框架也将堆叠在我们已经创建的小部件下。每个框架将容纳两个小部件。

        让我们看一下第一个。在第 38 行中,我们创建了 username_frame 对象,该对象将包含“用户名”文本和用于用户名输入姓名的 Entry 小部件。您将在第 43-44 行中创建它们。请注意侧面参数如何“左”和“右”以在 username_frame 中水平排列它们。我们以类似的方式创建其他两个区域。我不会在这里包含他们的描述,因为它们很相似。

        用户输入信息并单击“GO!”后按钮,我们调用 checkInput()(第 18 - 30 行)来检查用户输入的信息是否与第 20 行和第 21 行程序中已存储的信息匹配。如果匹配,则通过调用 root.destroy 关闭窗口()。

六、概括

        在本教程中,我们了解了如何通过创建两个单独的 UI 来使用 pack 方法。我们还研究了如何在简单和稍微复杂的布局中排列小部件。

        当然,还有很多方法可以改进这个 GUI 的外观和功能。一方面,您实际上可以允许用户创建自己的用户名和密码,并将该信息写入输出文件。您可以做的另一件事是允许 UI 使用“记住我”复选按钮来存储用户信息。此外,您可以将“忘记密码”标签更改为将用户重定向到新窗口的链接。此外,您可以让用户通过搜索计算机上的本地文件来为他们的个人资料选择自己的图像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124988.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue + Element UI 前端篇(十一):第三方图标库

Vue Element UI 实现权限管理系统 前端篇(十一):第三方图标库 使用第三方图标库 用过Elment的同鞋都知道,Element UI提供的字体图符少之又少,实在是不够用啊,幸好现在有不少丰富的第三方图标库可用&…

Python 网页爬虫原理及代理 IP 使用

目录 前言 一、Python 网页爬虫原理 二、Python 网页爬虫案例 步骤1:分析网页 步骤2:提取数据 步骤3:存储数据 三、使用代理 IP 四、总结 前言 随着互联网的发展,网络上的信息量变得越来越庞大。对于数据分析人员和研究人…

【多思路附源码】2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

赛题介绍 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬…

【容器vs虚拟机】

容器vs虚拟机 为什么用虚拟机什么是容器容器vs虚拟机 Docker被称为是轻量级的虚拟化。 首先,一般开发所需要的都是Linux环境,但我们大多数人的电脑都是Windows系统。所以要安装虚拟机,目的是为了在我们当前所使用的Windows上面安装上Linux环境…

conda创建python虚拟环境

1.查看当前存在那些虚拟环境 conda env list conda info -e 2.conda安装虚拟环境 conda create -n my_env_name python3.6 2.1在anaconda下改变python版本 当前3.7 安装3.7 conda create -n py37 python3.7 conda activate py37 conda create -n py37 python3.7conda a…

R语言入门——line和lines的区别

目录 0 引言一、 line()二、 lines() 0 引言 首先,从直观上看,lines比line多了一个s,但它们还是有很大的区别的,下面将具体解释这个两个函数的区别。 一、 line() 从R语言的帮助文档中找到,line()的使用&#xff0c…

微服务架构基础--第4章Spring Boot核心功能2

第4章Spring Boot核心功能2 一.预习笔记 1.静态资源访问 1-1:resource下的static文件夹会被视为默认的根目录(默认静态资源文件夹) 1-2:index.html是SpringBoot的默认首页(默认配置了的) 1-3:修改网页logo&#xf…

Golang RSA 生成密钥、加密、解密、签名与验签

文章目录 1.RSA2.Golang 实现 RSA生成密钥加密解密签名验签 3.dablelv/cyan参考文献 1.RSA RSA 是最常用的非对称加密算法,由 Ron Rivest、Adi Shamir、Leonard Adleman 于1977 年在麻省理工学院工作时提出,RSA 是三者姓氏首字母的拼接。 它的基本原理…

微服务01-基本介绍+注册中心EureKa

基本介绍 服务集群:一个请求由多个服务完成,服务接口暴露,以便于相互调用; 注册中心:每个服务的状态,需要进行维护,我们可以在注册中心进行监控维护服务; 配置中心:这些…

失效的访问控制漏洞复现(dvwa)

文章目录 失效访问控制是什么?dvwa漏洞复现用未授权访问获取shell 代码审计 失效访问控制是什么? 由于缺乏自动化的检测和应用程序开发人员缺乏有效 的功能测试,因而访问控制缺陷很常见。导致攻击者可以冒充用户、管理员或拥有特权的用户&…

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…

GPT-人工智能如何改变我们的编码方式

在本文中,您将找到我对人工智能和工作的最新研究的总结(探索人工智能对生产力的影响,同时开启对长期影响的讨论),一个准实验方法的示例(通过 ChatGPT 和 Stack Overflow 进行说明,了解如何使用简…

python in excel 如何尝鲜 有手就行

众所周知,微软在8月下旬放出消息python已入驻excel,可到底怎么实现呢。 今天我就将发布python in excel的保姆级教程,开始吧! 获取office 365 账号 首先我们要有微软office365 这时候需要再万能的某宝去找一个账号,…

已经2023年了,你还不会手撕轮播图?

目录 一、前言二、动画基础1. 定时器2. left与offsetLeft3. 封装函数3.1 物体3.2 目标点3.3 回调函数 4.封装 三、基础结构3.1 焦点图3.2 按钮3.3 小圆点3.4 总结 四、按钮显示五、圆点5.1 生成5.2 属性5.3 移动 六、按钮6.1 准备6.2 出错6.2.1 小圆点跟随6.2.2 图片返回 6.3 b…

云端AI:释放企业创新力,打造智慧企业

文章目录 1. 云端AI的基本概念1.1 云计算1.2 人工智能1.3 云端AI 2. 云端AI的重要性2.1 成本效益2.2 弹性扩展2.3 无缝整合2.4 实时更新 3. 云端AI的应用领域3.1 智能客服3.2 预测分析3.3 自动化生产 4. 云端AI的未来趋势4.1 边缘计算与云端AI的融合4.2 可解释性AI4.3 隐私和安…

zabbix使用 -- 添加监控节点、自定义监控项、触发器

目录 页面中的一些概念配置agent服务来获取目标主机数据对nginx服务器进行监控在网页中添加一台配置 自定义监控项 -- 以监控nginx为例1、开启nginx本身的统计功能2、编写脚本采集数据3、在zabbix-server里获取数据监控ssh进程监控cron进程 触发器报警1、注册一个企业微信2、微…

开启全新教学模式!vLive虚拟直播如何赋能线上教培

 如今,教培领域正在经历一场数字化的变革。随着科技的迅猛发展,教培形式也在不断演变,越来越多的企业和讲师开始采用虚拟直播来进行在线教学。那么,vLive虚拟直播https://live.vsochina.com/cnvLive虚拟直播是如何赋…

SpringBoot运维实用篇、打包、运行、高级配置、多环境开发、日志

文章目录 SpringBoot运维实用篇YW-1.SpringBoot程序的打包与运行程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题及解决方案SpringBoot项目快速启动(Linux版) YW-2.配置高级YW-2-1.临时属性设置YW-2-2.配置文件分类YW-2-3.自定义配置文件…

elasticsearch的数据聚合

聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且…

下载安装包,安装 PySide2 到 windows 系统

20201206 修订:修改 PyCharm 中工具的配置描述 一、下载两个.whl 文件到本地, 可以在此下载 https://mirrors.tuna.tsinghua.edu.cn/ 我选用的是以下两个版本: shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl …