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

news2024/12/26 9:25:09

今天我们一起来学习三个组件:Checkbutton、Radiobutton 和 LabelFrame。

同样,我们还是通过案例来讲解。

一、Checkbutton

Checkbutton(多选框)。大家都知道什么叫做“翻牌子”,今天的第一个例子就是来写一个翻牌子的程序。

Checkbutton 就是我们常见的多选框按钮,而 下面要讲的 Radiobutton 就是单选框按钮。那大家觉得 翻牌子 程序应该是使用  Checkbutton  还是  Radiobutton 来实现呢?我个人认为哈,应该是 Checkbutton 。

我们首先来测试一下  Checkbutton ,来感受一下 它的用法:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. v = tk.IntVar() #设置一个tk 变量用于表示按钮是否被选中,这里用整型变量 IntVar

  4. c = tk.Checkbutton(root, text= "测试一下", variable = v)

  5. c.pack()

  6. root.mainloop

运行结果如下:

没有按按钮时: ->         点下按钮的时候:->  

当我们点下按钮的时候,这个框框里会出现一个小勾,为了更直观的让大家知道选中和未选中时 v 的表现状态,我们可以把它显示出来,显示在 Label 标签里面。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. v = tk.IntVar() #设置一个tk 变量用于表示按钮是否被选中,这里用整型变量 IntVar

  4. c = tk.Checkbutton(root, text= "测试一下", variable = v)

  5. c.pack()

  6. l = tk.Label(root, textvariable = v)

  7. l.pack()

  8. root.mainloop

运行结果如下:

没有选中时: ->         选中的时候:->  

有了这样的基础,我们就可以来写我们的翻牌子程序了。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. GIRLS = ["西施", "貂蝉", "王昭君", "杨玉环"]

  4. v = []

  5. for girl in GIRLS:

  6. v.append(tk.IntVar())

  7. b = tk.Checkbutton(root, text = girl, variable = v[-1])

  8. b.pack()

  9. root.mainloop

运行结果如下:

我们希望把所有的 Checkbotton 左对齐:

通过设置 pack 的 anchor 选项,就可以实现了。 anchor 选项 是用于制定显示位置的。

anchor 用法:

1. 控制文本(或图像)在 Button 中显示的位置

2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 来定位(ewsn 代表东西南北,上北下南左西右东)

3. 默认值是 "center"

b.pack(anchor = "w")

二、Radiobutton

Radiobutton(单选框),Radiobutton 的用法和 Checkbutton 的用法基本一致,唯一不同的就是 Radiobutton 要实现单选的效果,就是需要同一组内所有的 Radiobutton 只能共享一个 variable 选项,并且需要设置不同的 value 选项的值。

我们通过代码来讲解:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. v = tk.IntVar()

  4. tk.Radiobutton(root, text = "One", variable = v, value = 1).pack(anchor = "w")

  5. tk.Radiobutton(root, text = "Two", variable = v, value = 2).pack(anchor = "w")

  6. tk.Radiobutton(root, text = "Three", variable = v, value = 3).pack(anchor = "w")

  7. root.mainloop()

运行结果如下:

这里有两点需要注意的:

1、variable 选项只能设置为同一个变量,这里都是 v;

2、value 选项的值 一定要不同,才能实现互测。

Radiobutton 的原理就是:你每一次点中一个按钮,它就会把这个按钮的 value 给 v,然后根据 v 的值来选中对应的框。

同样的,如果你有多个选项的话,我们仍然可以使用循环,使得代码更加简洁:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. LANGS = [

  4. ("Python", 1),

  5. ("Perl", 2),

  6. ("Ruby", 3),

  7. ("Lua", 4),

  8. ("C++", 5)]

  9. v = tk.IntVar()

  10. v.set(1)

  11. for lang, num in LANGS:

  12. b = tk.Radiobutton(root, text = lang, variable = v, value = num)

  13. b.pack(anchor = "w")

  14. root.mainloop()

运行结果如下:

有人要提意见了:“我不喜欢前面的小圆圈,我有圆形恐惧症!”

没问题,我们只需要加一个选项 indicatoron = False。(indicatoron 就是指示器,就是前面的小圆圈,把它设置为 False,就不会显示了。

 
  1. b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)

  2. b.pack(anchor = "w")

如下:

这样不美观,我们可以横向填充按钮。

 
  1. b = tk.Radiobutton(root, text = lang, variable = v, value = num, indicatoron = False)

  2. b.pack(fill = "x")

三、LabelFrame

LabelFrame(标签框架),这实际上是 Frame 框架的进化版,从形态上来说,也就是添加了 Label 的 Frame,但是有了它,Checkbutton 和 Radiobutton 的分组就变得简单了。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. group = tk.LabelFrame(root, text = "最好的脚本语言是:", padx = 5, pady =5)

  4. group.pack(padx = 10, pady = 10)

  5. LANGS = [

  6. ("Python", 1),

  7. ("Perl", 2),

  8. ("Ruby", 3),

  9. ("Lua", 4),

  10. ("C++", 5)]

  11. v = tk.IntVar()

  12. for lang, num in LANGS:

  13. b = tk.Radiobutton(group, text = lang, variable = v, value = num)

  14. b.pack(anchor = "w")

  15. root.mainloop()

运行结果如下:

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

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

相关文章

如何清除Linux密钥环

如何清除Linux密钥环 Linux系统密钥环是什么如何清除密钥环方法一方法二 说明 最近使用Linux系统电脑,启动VScode总是弹出解锁密钥环的弹窗,单击取消后还会反复弹出,需要取消三次,但是如果没有及时取消会导致电脑卡机,…

Appium+python自动化(二十二)- 控件坐标获取(超详解)

简介 有些小伙伴或者是童鞋可能会好奇会问上一篇中的那个monkey脚本里的坐标点是如何获取的,不是自己随便蒙的猜的,或者是自己用目光或者是尺子量出来的吧,答案当然是:NO。获取控件坐标点的方式这里宏哥给小伙伴们分享和讲解三种方…

安全第一天

1. 编码 1.1 ASCLL编码 ASCII 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。 1.2 URL编码 URL:(统一资源定位器、定位地址,俗称网页…

数据结构【图】

第六章 图 一、图 1.定义&#xff1a;V是顶点集&#xff0c;E是边集&#xff1b;|V|表示顶点数&#xff0c;称为阶&#xff1b;|E|表示边数&#xff1b;有向图叫弧<>&#xff0c;无向叫边&#xff08;&#xff09; &#xff1b; 有向图&#xff1a;有方向&#xff0c;&…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

python单元测试unittest实例详解

这篇文章主要介绍了python单元测试unittest用法,以实例形式详细分析了Python中单元测试的概念、用法与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python单元测试unittest用法。分享给大家供大家参考。具体分析如下&#xff1a; 单元测试作为任何…

用R语言来进行ababoost模型的构建

每天进步一点点&#xff0c;今天来分享怎么用R语言来进行ababoost模型的构建。 首先&#xff0c;什么是adaboost模型呢&#xff1f;它是一种迭代算法&#xff0c;属于boosting这个大类别的一员。它的核心思想是针对同一个训练集训练不同的分类器(弱分类器)&#xff0c;然后把这…

力扣题库刷题笔记118--杨辉三角

1、Python代码如下&#xff1a; 2、个人Python代码如下&#xff1a; 截图1的第5-9行和截图2的第5-6行均是生成一个元素均为1的杨辉三角。

1.前端入门

文章目录 一、基础认知1.1 认识网页&#xff1a;1.2 五大浏览器1.3 Web标准 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、基础认知 1.1 认识网页&#xff1a; 1.网页由哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接。 2.我们…

Spring Security从入门到精通

Spring Security从入门到精通&#xff08;学习三更老师的视频&#xff09; 视频地址&#xff1a;我觉得讲的不赖。三更老师的Spring Security视频 课程介绍 0. 简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供…

接口漏洞-DVWS(XXE+鉴权)+阿里云KEY

dvws靶场 靶场&#xff1a;https://github.com/snoopysecurity/dvws-node 开启靶场&#xff0c;注册一个普通用户&#xff0c;登录成功 来到首页点击admin area 发现进入几秒钟之后又跳转回到首页&#xff0c;只有管理员admin用户才能进入。 点击admin area抓包&#xff0c;发现…

FPGA——verilog实现格雷码与二进制的转换

文章目录 一、格雷码简介二、二进制转格雷码三、格雷码转二进制四、仿真 一、格雷码简介 格雷码是一种循环二进制码或者叫作反射二进制码。跨时钟域会产生亚稳态问题&#xff08;CDC问题&#xff09;&#xff1a;从时钟域A过来的信号难以满足时钟域B中触发器的建立时间和保持时…

Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24

单继承 class luban:def __init__(self, name):self.name nameself.skill "摸鱼飞弹"self.damageLevel 20def attack(self):print("{} 使用了技能{} &#xff0c;给敌方带来了极大的困扰\n""并有{}% 的机会造成一击必杀的效果".format(self.…

初识socket编程的相关概念

文章目录 IP地址和MAC地址源IP地址和目的IP地址 端口号(port)端口号和PID 初识TCP/UDP协议TCPUDP可靠/不可靠传输 网络字节流理解socket套接字概念socket常见APIsocket接口参数中的结构体 IP地址和MAC地址 IP协议有两个版本&#xff0c;IPv4和IPv6&#xff0c;凡是提到IP协议&…

STC12C5A60S2 单片机串口2的通信功能测试

根据手册说明&#xff0c;STC12C5A60S2 系列单片机可以直接使用 reg51.h 的头文件&#xff0c;只是在用到相应的特殊功能寄存器时&#xff0c;要做相应的定义即可。 笔记来自视频教程链接: https://www.bilibili.com/video/BV1Qq4y1Z7iS/?spm_id_from333.880.my_history.page…

python绘制地图时添加比例尺

目前为止我没有找到cartopy包自动添加地图比例尺的方式&#xff0c;我结合别人的代码写了这个手动添加比例尺的函数&#xff0c;个人觉得在外观上比线段比例尺漂亮一些。之所以是手动的&#xff0c;是因为这种方法不会根据你的地图坐标系和投影自动生成比例尺&#xff0c;而需要…

SpringCloud学习路线(9)——服务异步通讯RabbitMQ

一、初见MQ &#xff08;一&#xff09;什么是MQ&#xff1f; MQ&#xff08;MessageQueue&#xff09;&#xff0c;意思是消息队列&#xff0c;也就是事件驱动架构中的Broker。 &#xff08;二&#xff09;同步调用 1、概念&#xff1a; 同步调用是指&#xff0c;某一服务…

Mysql表的查找进阶

重点细节知识&#xff1a;NULL是表示表里这个格子是空着的&#xff0c;NULL参与各种运算都是->false&#xff0c;但是只有这个才是可以用NULL等于NULL成功的 <>。,看一下&#xff0c;下图的区别&#xff0c;下面的是连空也算上了 补充一个is 用法&#xff0c;和上面语…

ubuntu docker离线安装docker(.deb包方式)(成功)(附卸载方法)

参考文章&#xff1a;Install Docker Engine on Ubuntu 文章目录 安装步骤下载安装包拷贝到目标主机并执行安装命令 验证拉取运行容器测试build dockerfile测试持久运行容器测试主机重启后&#xff0c;docker各服务是否正常自启 卸载方法附&#xff1a;各安装包作用说明&#x…

【iPadOS 开发】打开 iPad 的开发者模式的方法

文章目录 1. 前提条件2. 具体方法 1. 前提条件 iPad 通过 Type-C 线连接到 Mac Mac上已经安装 Xcode 2. 具体方法 在 Xcode 顶栏中的 Window 中打开 Devices and Simulators &#xff0c;可以看到自己的设备&#xff1a; 接着在 iPad 上进入 设置 > 隐私与安全性 > 开…