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

news2024/12/26 21:37:07

一、说明

        在本教程中,我们将了解如何制作登录 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 button
    is 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 window

login = 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 widget
    entered_pswrd = password_entry.get()  # get password from Entry widget

    if (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 button
    is 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! Button

go_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.coloradmin.cn/o/970608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Yolov5的tensorRT加速(python)

地址:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 下载yolov5代码 方法一:使用torch2trt 安装torch2trt与tensorRT 参考博客:https://blog.csdn.net/dou3516/article/details/124538557 先从github拉取torch2trt源码 ht…

【C++ 二叉搜索树】

目录 1.什么是二叉搜索树2.构建二叉搜索树2.1首先搭建树的框架2.2搭建搜索树的框架 3.二叉搜索树的插入3.1非递归式插入3.2递归式插入 4.二叉搜索树的查找4.1非递归查找4.2递归查找 5.二叉搜索树的删除5.1非递归删除5.2递归删除 6.整个代码实现 1.什么是二叉搜索树 简单来讲就…

WebDAV之π-Disk派盘 + 小书匠

小书匠是一款功能丰富,强大的知识管理工具。全平台覆盖,离线数据存储,自定义数据服务器,所见即所得的 markdown 编辑体验。 小书匠提供了多种实用的编辑模式,例如:栏编辑、双栏编辑、三栏编辑、全屏写作、全屏阅读等。并且该软件还提供了许多有用的扩展语法,比如Latex公…

【前端demo】CSVJSON转换器 原生实现:CSV转换为JSON,JSON转换为CSV

文章目录 效果过程textareaTooltip提示工具按钮的min-width判断输入是否是CSV或JSONJSON与CSV样例JSON转为CSVCSV转为JSON不足之处 代码HTMLCSSJS 其他demo 效果 效果预览:CSV&JSON Converter (codepen.io) 参照的预览:JSV Converter(gpaiva00.git…

地毯16 CFR 1630/1631安全防火性易燃性测试

地毯的16 CFR 1630/1631安全防火性易燃性测试是一项重要的产品检测认证标准。该测试旨在评估地毯材料的防火性能,以确保其在使用过程中不会引发火灾或加剧火势。测试过程包括对地毯样品进行燃烧测试和燃烧后的评估。 根据16 CFR 1630标准,地毯样品将被暴…

检漏仪和高真空度控制技术在热管漏率和内部真空度测量中的应用

摘要:大量MEMS真空密封件具有小体积、高真空和无外接通气接口的特点,现有的各种检漏技术无法对其进行无损形式的漏率和内部真空度测量。基于压差法和高真空度恒定控制技术,本文提出了解决方案。方案的具体内容是将被测封装器件放置在一个比器…

elementui表格自定义表头的两种方法

表格自定义表头的方式 多选框表头换文字 请查看上篇博客:http://t.csdn.cn/69De2 文字换按钮 render-header render-header方法详情 Table-column Attributes 参数说明类型可选值默认值render-header列标题 Label 区域渲染使用的 FunctionFunction(h, { column, $in…

恒运资本:北向资金流出一定会跌吗?股票涨跌与什么有关?

北向资金被认为是A股商场的风向标,它的动向往往会影响投资者的心情。那么北向资金流出一定会跌吗?股票涨跌与什么有关?恒运资本也为大家准备了相关内容,以供参阅。 北向资金流出一定会跌吗? 北向资金流出并不一定意味…

快速解决 adb server version doesn‘t match this client

这个问题是由于电脑上安装了多个版本的adb工具,客户端和服务端的版本不一致,无法正常通信导致。最快的解决方法就是将Android SDK中adb复制到系统目录下。 操作步骤如下: 1. 查看adb版本和路径 执行adb version,如下&#xff0…

手机无人直播软件在苹果iOS系统中能使用吗?

在现代社交媒体的时代,直播带货已经成为了一种热门的销售途径。通过直播,人们可以远程分享自己的商品,与观众进行互动,增强沟通和参与感。而如今,手机无人直播软件更是成为了直播带货领域的一项火爆的技术。那么&#…

渗透测试——安全漏洞扫描工具APPScan的安装与基本使用步骤

前言 HCL AppScan Standard是安全专家和渗透测试者设计的动态应用程序安全测试工具,AppScan使用强大的扫描引擎,会自动检索目标应用程序并测试漏洞。测试结果按优先级排列,允许操作员快速分类问题、发现最关键的漏洞。每个检测到的问题都可以…

Python 自学:使用线程模块同时运行代码 Threading

1. 以下代码中,程序会等一个函数执行完毕才执行下一个函数。 import timestart time.perf_counter()def do_something():print(Sleeping 1 second...)time.sleep(1)print(Done Sleeping...)do_something() do_something()finish time.perf_counter()print(fFinis…

惠普NS1005 NS1020打印机如何判断是不是该加粉了

惠普 Laser NS MFP 1005 1020系列智能闪充加粉式多功能一体机的耗材余量指示灯显示“1” “2” “2”时,就是在“说”:快没有墨粉了; 耗材余量指示灯和充粉口指示灯 在不同的状态下代表不同的意思,当耗材余量指示灯显示“1” “2”…

2023年9月上海/广州/深圳CSPM-3国标项目管理中级认证招生

CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要…

【数据结构-栈】栈基础

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

java持久化框架JPA,自动执行sql语句的代码实现

在springboot入口处调用: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBoot…

Mac使用VMWare安装centos7回车回退

Mac使用VMWare安装centos7回车回退 说明:本人电脑是MacBook 14pro M2芯片,安装的为VMWare16.2.5,Centos版本为centos stream9 解决方法:使用VM16.2.5Stream9Debian 11操作系统正常安装 问题:下载了VMWare16和Centos…

【微服务部署】五、Jenkins+Docker一键打包部署NodeJS(Vue)项目的Docker镜像步骤详解

NodeJS(Vue)项目也可以通过打包成Docker镜像的方式进行部署,原理是先将项目打包成静态页面,然后再将静态页面直接copy到Nginx镜像中运行。 一、服务器环境配置 前面说明了服务器Nginx的安装和配置,这里稍微有些不同&a…

java线程和go协程

一、线程的实现 线程的实现方式主要有三种:内核线程实现、用户线程实现、用户线程加轻量级进程混合实现。因为自己只对java的线程比较熟悉一点,所以主要针对java线程和go的协程之间进行一个对比。 线程模型主要有三种:1、内核级别线程&#…

微服务主流框架概览

微服务主流框架概览 目录概述需求: 设计思路实现思路分析1.HSF2.Dubbo 3.Spring Cloud5.gRPC Service mesh 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a be…