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

今天我们一起来学习三个组件: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()

运行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

巅峰极客2023 hellosql

随便输一个payload,有waf 这题只有两个回显,分别是太酷啦和nonono,不显示报错、登录成功等各种信息,目前只能想到用时间盲注。 抓包fuzz,194都是被过滤的 不止这些,手工测出来if、sleep、benchmark、*、rp…

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色,HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间,我们能够更加方便地通过色调、…

Keil系列教程08_Configuration(二)

1写在前面 本文接着上一篇文章《Keil系列教程07_Configuration(一)》讲述的工程目标选项的后三项配置:Shortcut Keys快捷键、Text Completion代码完形、Other其他。 这后面三部分内容在该系列教程其它也会牵涉,也是一些常用、重要…

idea中常用的快捷键

快捷键: 1.快速生成main方法 main/psvm public static void main(String[] args) {} 2.快速复制当前行的代码: ctrld 3.快速捕获异常: altctrlt 4.快速打印结果: sout/soutv System.out.println(s); System.out.println("s " s); 5.自动生成对象的返回值…

tinkerCAD案例:8.Cylinder Earrings 圆筒耳环

tinkerCAD案例:8.Cylinder Earrings 圆筒耳环 In this lesson you will learn how to create earrings using cylinder shapes. So let’s get started! 在本课中,您将学习如何使用圆柱形制作耳环。所以让我们开始吧! 说明 Drag a Cylinder …

el-Cascader 中div上绑定keyDown事件

keydown,keyup,keypress 事件默认是给页面上可以聚焦的元素绑定键盘事件,例如input输入框,点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢?这里用到tabindex属性。 …

SWF格式视频怎么转换成AVI格式?简单的转换方法分享

当你想要在不同的设备上播放视频时,将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放,而AVI格式则可以在更广泛的设备上播放,包括智能手机,平板电脑和电视机等。那么我们怎么将SWF转换成AVI…

关于Nginx的 location 配置各种情况转换后的样子记录

Nginx location 配置要代理的地址测试URL代理后的URL举例编号/test01http://127.0.0.1:8080/test01/abc/test/test01/abc/test01/test02http://127.0.0.1:8080//test02/abc/test//abc/test02/test03/http://127.0.0.1:8080/test03/abc/test/test03/abc/test03/test04/http://12…

Drools用户手册翻译——第四章 Drools规则引擎(六)执行控制

主要讲了规则匹配时的优先级设置的方式。 甩锅声明:本人英语一般,翻译只是为了做个笔记,所以有翻译错误的地方,错就错了,如果你想给我纠正,就给我留言,我会改过来,如果懒得理我&…

css终极方案PostCSS

一见如故 原理 所有的css框架都在一样的事,那就是由一个css生成一个新的css,那么postcss就来做了一个抽离: 1、将原有的css解析成抽象语法树 2、中间经过若干个插件 3、重新文本化,形成新的css postcss.config.js module.expor…

Spring Cloud 负载平衡的意义什么?

目录 一、什么是负载平衡 二、为什么需要负载平衡 三、Spring Cloud 如何实现负载平衡 四、负载平衡的nginx配置 一、什么是负载平衡 负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中…

32位Cortex-M4 MCU:LPC54607J256ET180E、LPC54605J512BD100K 180MHz嵌入式微控制器

LPC546xx 32 位微控制器(MCU) 具有丰富的外设集、极低的功耗和增强的调试功能。 LPC546xx MCU系列采用ARM Cortex-M4内核,可提供以太网支持,并设有一个TFT LCD控制器和两个CAN FD模块。LPC546xx MCU旨在提高灵活性和性能可扩展性,可提供高达1…

Java - 泛型

泛型 1、 当我们ArrayList表示存放到ArrayList集合中的元素是Dog类型时 2、如果编译器发现添加的类型&#xff0c;不满足要求&#xff0c;就会报错。 3、遍历的时候直接取出Dog类型&#xff0c;而不是Object。 ArrayList<Week> weeks1 new ArrayList<>();好处…

科研院所用泛微搭建信创办公平台,统一办公,业务融合,安全便捷

国家全面推动重要领域的信创改造工作&#xff0c;要求到2027年底&#xff0c;对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。 科研机构作为智力、知识密集型机构&#xff0c;承载着大量数据、信息资产&#xff0c;数字化程度高&#xff0c;业务系统多样&a…

SpringBoot项目修改Tomcat版本号

SpringBoot项目修改Tomcat版本号 前言如果项目是以jar包形式打包部署如果项目是以war包形式打包部署示例 仰天大笑出门去&#xff0c;我辈岂是蓬蒿人 前言 Springboot项目,默认是使用内嵌Tomcat servlet容器形式打包部署。关于怎么修改默认的版本号&#xff0c;捣鼓了好久终于…

NLP(六十)Baichuan-13B-Chat模型使用体验

2023年7月11日&#xff0c;百川智能正式发布参数量130亿的通用大语言模型Baichuan-13B-Base、对话模型Baichuan-13B-Chat及其INT4/INT8两个量化版本。   本文将介绍大模型BaiChuan-13B-Chat的使用体验&#xff0c;其HuggingFace网址为&#xff1a;https://huggingface.co/bai…

8. Vmvare中重新分配Linux系统的分区空间大小

1. 说明 一般情况下&#xff0c;在使用Vmvare虚拟机创建配置Linux系统时&#xff0c;默认将系统的内存设置为4GB&#xff0c;硬盘大小设置为40GB&#xff0c;但随着空间利用的越来越多&#xff0c;内存会出现不够使用的情况&#xff0c;此时需要重新分配空间大小&#xff0c;具…

一起学数据结构(1)——复杂度

目录 1. 时间复杂度&#xff1a; 1.1 时间复杂度的概念&#xff1a; 1.2 时间复杂度的表示及计算&#xff1a; 1.3 较为复杂的时间复杂度的计算&#xff1a; 2. 空间复杂度&#xff1a; 2.1 空间复杂度的概念&#xff1a; 2.2 空间复杂度的计算&#xff1a; 1. 时间复杂度…

【C++进阶之路】适配器、反向迭代器、仿函数

文章目录 前言一、适配器①模拟实现栈②模拟实现对列 二、反向迭代器三、仿函数总结 前言 我们先来笼统的介绍一下今天的三个内容。 适配器——简单的理解就是复用&#xff0c;用已经实现的轮子&#xff0c;来继续实现某种功能。 反向迭代器——原理很简单&#xff0c;就是对…

Maven发布中央仓库始终报403

把域名 oss.sonatype.org 全部替换为&#xff1a;s01.oss.sonatype.org