《零基础入门学习Python》第075讲:GUI的终极选择:Tkinter12

news2024/12/26 21:58:42

Tkinter 的基本组件我们已经介绍得七七八八了,剩下的一些我们在这节课全部都会讲解完毕。

(一)Message组件

Message(消息)组件是 Label 组件的变体,用于显示多行文本消息。众所周知,我们的Label 组件只能显示单行消息。Message 组件能够自动换行,并调整文本的尺寸使其适应给定的尺寸。

我们来举个例子,大家就明白了:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w1 = tk.Message(root, text = "这是一则短消息", width = 100)

  4. w1.pack()

  5. w2 = tk.Message(root, text = "这是一则骇人听闻的长长长长长长长长长长长消息", width = 100)

  6. w2.pack()

  7. root.mainloop()

(二)Spinbox组件

Spinbox 组件(Tk8.4 新增)是 Entry 组件的变体,用于从一些固定的值中选取一个。众所周知,我们的Entry组件是能够让用户随心所欲输入数据的组件,Spinbox 组件就进一步限制用户输入的数据。

我们还是举个例子:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w= tk.Spinbox(root, from_ = 0, to = 10)

  4. w.pack()

  5. root.mainloop()

我们可以通过上下点,输入 0 -10,另外,我们还是可以任意输入数据,我们可以通过改变 increment 选项的值,来改变步进。

你还可以通过元组指定允许输入的值:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w= tk.Spinbox(root, values = ("python", "C", "java", "C#"))

  4. w.pack()

  5. root.mainloop()

(三)PanedWindow组件

PanedWindow 组件(Tk8.4 新增)是一个空间管理组件。跟 Frame 组件类似,都是为组件提供一个框架,不过 PanedWindow 允许让用户调整应用程序的空间划分。

不明白的话,可以先看下面的两个例子,就会豁然开朗了。

我们的窗格有简单的,例如两个窗格:上和下,左和右。

 
  1. import tkinter as tk

  2. m = tk.PanedWindow(orient="vertical")

  3. m.pack(fill="both", expand=1)

  4. top = tk.Label(m, text="top pane")

  5. m.add(top)

  6. bottom = tk.Label(m, text="bottom pane")

  7. m.add(bottom)

  8. tk.mainloop()

创建一个 3 窗格的 PanedWindow 组件则需要一点小技巧:

 
  1. import tkinter as tk

  2. #先创建左右的窗格

  3. m1 = tk.PanedWindow() #默认是左右分布的

  4. m1.pack(fill="both", expand=1)

  5. left = tk.Label(m1, text = "left pane")

  6. m1.add(left)

  7. m2 = tk.PanedWindow(orient = "vertical")

  8. m1.add(m2)

  9. top = tk.Label(m2, text = "top pane")

  10. m2.add(top)

  11. bottom = tk.Label(m2, text = "bottom pane")

  12. m2.add(bottom)

  13. tk.mainloop()

这里不同窗格事实上是有一条“分割线”(sash)隔开,虽然你看不到,但你却可以感受到它的存在。不信?不妨把鼠标缓慢移动到大概的位置,当鼠标指针改变的时候后拖拽鼠标......

但我们也可以把“分割线”给显式地显示出来,并且可以为它附上一个“手柄”(handle):

 
  1. import tkinter as tk

  2. #先创建左右的窗格

  3. m1 = tk.PanedWindow(showhandle = True, sashrelief = "sunken") #默认是左右分布的

  4. m1.pack(fill="both", expand=1)

  5. left = tk.Label(m1, text = "left pane")

  6. m1.add(left)

  7. m2 = tk.PanedWindow(orient = "vertical", showhandle = True, sashrelief = "sunken")

  8. m1.add(m2)

  9. top = tk.Label(m2, text = "top pane")

  10. m2.add(top)

  11. bottom = tk.Label(m2, text = "bottom pane")

  12. m2.add(bottom)

  13. tk.mainloop()

图中的小方块就是 handle, 默认离边界为 8 个像素,可以通过 handlepad 选项来设置它的位置。

(四)Toplevel 组件

Toplevel 组件和 root 组件是一个级别的,Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件。

Toplevel 组件通常用在显示额外的窗口、对话框和其他弹出窗口上。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. def create():

  4. top = tk.Toplevel()

  5. top.title("Python tkinter")

  6. msg = tk.Message(top, text = "I love Python!")

  7. msg.pack()

  8. tk.Button(root, text = "创建顶级窗口", command = create).pack()

  9. root.mainloop()

想要几个就点几下。

得到的顶级窗口都是相互独立的,但是都是来自于 root 窗口,当 root 窗口关闭后,所有的顶级窗口都被关闭。

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

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

相关文章

简单的Kubernetes集群二进制方式部署

Kubernetes二进制方式部署 一:操作系统初始化配置(所有机子)关闭防火墙关闭selinux关闭swap根据规划设置主机名在master添加hosts调整内核参数时间同步 二:部署 etcd 集群1.准备签发证书环境#准备cfssl证书生成工具生成Etcd证书编…

在SIP 语音呼叫中出现单通时要怎么解决?

在VoIP的环境中,特别是基于SIP通信的环境中,我们经常会遇到一些非常常见的问题,例如,单通,注册问题,回声,单通等。这些问题事实上都有非常直接的排查方式和解决办法,用户可以按照一定…

Quartz中集群模式源码级解析

文章目录 案例搭建 案例搭建 创建一个JOB实现类 package org.quartz.examples.example13;import org.quartz.*;import java.util.Date;/*** This job has the same functionality of SimpleRecoveryJob except that this job implements is stateful, in that it* will have …

Spring框架——IOC配置文件方式

Spring框架的概述和入门 目录 Spring框架的概述和入门 什么是Spring框架 Spring框架的特点 Spring框架的IOC核心功能快速入门 Spring框架中的工厂(了解) Spring 创建Bean对象的三种方式 Spring框架的Bean管理的配置文件方式 Spring框架中标签的配…

Token与Cookie、Session登录机制

Cookie 背景 Web 的兴起(所谓交互式就是你不光可以浏览,还可以登录,发评论,购物等用户操作的行为),单纯地浏览 web 已经无法满足人们的要求,比如随着网上购物的兴起,需要记录用户的…

寻找丢失数字:数学与位运算的解密之旅

本篇博客会讲解力扣“268. 丢失的数字”的解题思路,这是题目链接。 注意进阶中的描述:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?这里我会讲解两种思路,它们的时间复杂度是O(N),空间复杂度是O(1)…

STM32F1基于标准库ST7735 1.8‘‘LCD显示DHT11数据

STM32基于标准库ST7735 1.8‘’LCD显示DHT11数据 📍HAL库驱动可以参考:《STM32基于HAL工程读取DHT11数据》🌼显示效果: 🌻ST7735 128x160 1.8’LCD屏幕 📌屏幕资料和相关驱动可以参考《1.8寸TFT LCD128…

JDK各版本重要变革

各版本更新详情 JDK8(LTS)--2014/3 语法层面 lambda表达式(重要特色之一) 一种特殊的匿名内部类,语法更加简洁允许把函数作为一个方法的参数,将代码象数据一样传递&#xff0c;即将函数作为方法参数传递基本语法: <函数式接口> <变量名> (参数...) -> { 方法…

迷你主机中的战斗机 Intel NUC 12 Serpent Canyon拆解

千呼万唤始出来&#xff0c;新一代游戏和创作者性能怪兽 mini主机 NUC 12 Serpent Canyon&#xff08;巨蛇峡谷终于发售了&#xff0c;以超紧凑的 2.5 升尺寸提供用户所需的所有性能和创新功能。NUC 12 Enthusiast 还首次将 Intel Deep Link 引入桌面&#xff0c;使 CPU 和 GPU…

类的继承和super关键字的使用(JAVA)

继承 所有的OOP语言都会有三个特征&#xff1a; 封装&#xff08;点击可跳转&#xff09;&#xff1b;继承&#xff1b;多态 为什么会有继承呢&#xff1f;可以先看下面的例子&#xff1a; 上面这两个类中的代码很相似因为它们只有最后一个方法不同其它的都相同&#xff0c;这样…

DbVisualizer Pro Crack

DbVisualizer Pro Crack DbVisualizer是适用于开发人员、DBA和分析师的通用数据库工具。它是最终的解决方案&#xff0c;因为相同的工具可以在访问各种数据库的所有主要操作系统上使用。支持的数据库Amazon Redshift、DB2 LUW、Exasol、H2、Informix、JavaDB/Derby、Microsoft …

【项目 进程10】2.21 alarm函数 2.22setitimer定时器函数

2.21 alarm函数 #include <unistd.h> unsigned int alarm(unsigned int seconds);功能&#xff1a;设置定时器&#xff08;闹钟&#xff09;。函数调用&#xff0c;开始倒计时&#xff0c;当倒计时为0的时候&#xff0c; 函数会给当前的进程发送一个信号&#xff1a;SIG…

C++中内存的动态管理

我们在C语言中了解到可以在栈区动态开辟空间&#xff0c;并且用完要进行释放&#xff0c;防止内存泄漏。 引入 C中也有可以进行动态开辟空间和释放空间的操作符new 、delete&#xff0c;虽然C中也可以用malloc、calloc、realloc、free函数&#xff0c;但是C中引入了类&#x…

宋浩概率论笔记(二)随机变量

本章节内容较多&#xff0c;是概率论与数理统计中最为重要的章节&#xff0c;对于概率密度和分布函数的理解与计算要牢牢掌握&#xff0c;才能在后期的学习中更得心应手。

小研究 - 微服务系统服务依赖发现技术综述(一)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

【Azure上云项目实战】 合规性的身份验证与访问控制:在 Azure 中实现符合 PCI DSS 要求的架构设计

文章目录 一、开篇写在前面二、项目背景及介绍三、Azure PCI DSS 项目架构及组件四、身份验证、访问控制4.1 三层防御控制4.2 三层部署结构 五、跳板机六、与 PCI DSS 要求的关系七、该篇总结&#xff08;重要&#xff09;写在文末 一、开篇写在前面 各位博客阅读者们以及对云…

【A200】Ubuntu18.04 + ROS-Melodic + 比业电子VISIOSCAN雷达 评测

大家好&#xff0c;我是虎哥&#xff0c;朋友介绍&#xff0c;有一款单线激光雷达&#xff0c;25米的检测距离&#xff0c;有80HZ的扫描频率&#xff0c;而且角度分辨率最高可以到0.1&#xff0c;这个参数我确实没有见过&#xff0c;所以立刻着手从厂家那申请到了VISIOSCAN雷达…

Android的Handler消息通信详解

目录 背景 1. Handler基本使用 2. Handler的Looper源码分析 3. Handler的Message以及消息池、MessageQueue 4. Handler的Native实现 4.1 MessageQueue 4.2 Native结构体和类 4.2.1 Message结构体 4.2.2 消息处理类 4.2.3 回调类 4.2.5 ALooper类 5. 总结&…

轻量级目标检测模型NanoDet-Plus微调、部署(保姆级教学)

前言 NanoDet-Plus是超快速、高精度的轻量级无锚物体检测模型&#xff0c;github项目文件。可以在移动设备上实时检测。其主要特点是 超轻量&#xff1a;模型文件仅980KB(INT8)、1.8MB(FP16)超快&#xff1a;移动ARM CPU上97fps&#xff08;10.23ms&#xff09;高精度&#xf…

C++内存管理(动态内存开辟)

我们在C语言当中想要使用堆区的空间的时候就需要使用malloc函数进行手动的申请&#xff0c;但是我们在申请的时候需要手动进行计算&#xff0c;经过计算之后还需要进行判空操作&#xff0c;并且还不能进行任意值的初始化。这一切看起来在学习完C当中的动态开辟之前显得很正常&a…