软件测试|超好用超简单的Python GUI库——tkinter(十一)

简介: 软件测试|超好用超简单的Python GUI库——tkinter(十一)

前言

我们在使用音乐播放软件时,我们想选择播放模式时,我们只能在随机播放,单曲循环,列表循环三种方式中选择一个,这就是我们常见的单选的情况,我们在设计我们的GUI时,也有可能遇到单选的情况,tkinter也同样给了我们实现单选的控件——Radiobutton,本文就给大家介绍一下单选框控件Radiobutton的使用。

Radiobutton单选框控件

单选框按钮控件(Radiobutton)允许用户选择具体的选项值,不过与 Listbox 相比,单选按钮控件仅允许用户选择单一的选项值,各个选项值之间是互斥的关系,因此只有一个选项可以被用户选择。

Radiobutton 控件通常都是成组出现的,所有控件都使用相同的变量。Radiobutton 可以包含文本或图像,每一个按钮都可以与一个 Python 函数相关联。当按钮被按下时,对应的函数会被执行。这里需要注意的是,单选按钮控件仅能显示单一字体的文本,但文本可以跨越多行,除此之外,您还可以为个别的字符添加下划线。

Radiobutton特有属性

属性 说明
activebackground 设置当 Radiobutton 处于活动状态(通过 state 选项设置状态)的背景色,默认值由系统指定
activeforeground 设置当 Radiobutton 处于活动状态(通过 state 选项设置状态)的前景色,默认值由系统指定
compound 1. 默认值为 None,控制 Radiobutton 中文本和图像的混合模式,默认情况下,如果有指定位图或图片,则不显示文本
2. 如果该选项设置为 "center",文本显示在图像上(文本重叠图像)
3. 设置为 "bottom","left","right" 或 "top",那么图像显示在文本的旁边,比如如"bottom",则显示图像在文本的下方。
disabledforeground 指定当 Radiobutton 不可用的时的前景色颜色,默认由系统指定
indicatoron 1. 该参数表示选项前面的小圆圈是否被绘制,默认为 True,即绘制;
2. 如果设置为 False,则会改变单选按钮的样式,当点击时按钮会变成 "sunken"(凹陷),再次点击变为 "raised"(凸起)
selectcolor 设置当 Radiobutton 为选中状态的时候显示的图片;如果没有指定 image 选项,该选项被忽略
takefocus 如果是 True,该组件接受输入焦点,默认为 False
variable 表示与 Radiobutton 控件关联的变量,注意同一组中的所有按钮的 variable 选项应该都指向同一个变量,通过将该变量与 value 选项值对比,可以判断用户选中了哪个按钮。

Radiobutton常用方法

方法 说明
deselect() 取消该按钮的选中状态
flash() 刷新 Radiobutton 控件,该方法将重绘 Radiobutton控件若干次(即在"active" 和 "normal" 状态间切换)
invoke() 1. 调用 Radiobutton 中 command 参数指定的函数,并返回函数的返回值
2. 如果 Radiobutton 控件的 state(状态) 是 "disabled" (不可用)或没有指定 command 选项,则该方法无效
select() 将 Radiobutton 控件设置为选中状态

示例

Radiobutton 控件用来解决多选一的问题,它通常是成组出现的,示例如下:

import tkinter as tk

window = tk.Tk()
window.title("德甲联赛")
window.geometry('400x180')
# IntVar() 用于处理整数类型的变量
v = tk.IntVar()
# 根据单选按钮的 value 值来选择相应的选项
v.set(0)
# 使用 variable 参数来关联 IntVar() 的变量 v
# tk.Radiobutton(window, text="拜仁慕尼黑", fg='red',font=('微软雅黑','12','bold'),variable=v, value=0).pack(anchor = 'w')
tk.Radiobutton(window, text ="拜仁慕尼黑", variable=v, value=1).pack(anchor="w")
tk.Radiobutton(window, text="多特蒙德", variable=v, value=2).pack(anchor = 'w')
tk.Radiobutton(window, text="柏林联", variable=v, value=3).pack(anchor = 'w')
tk.Radiobutton(window, text="莱比锡红牛", variable=v, value=4).pack(anchor = 'w')
# 显示窗口
window.mainloop()

运行脚本之后,结果如下:

在这里插入图片描述

代码优化

上面的代码直接实现了单选功能,但是我们可以看到还是存在冗余的情况,我们在选项中存在多行的冗余代码:

import tkinter as tk
window = tk.Tk()
window.title("德甲联赛")
window.geometry('400x180')

site = [('拜仁慕尼黑',1),
        ('多特蒙德',2),
        ('柏林联',3),
        ('莱比锡红牛',4)]
# IntVar() 用于处理整数类型的变量
v = tk.IntVar()
# 重构后的写法,也非常简单易懂
for name, num in site:
    radio_button = tk.Radiobutton(window,text = name, variable = v,value =num)
    radio_button.pack(anchor ='w')
# 显示窗口
window.mainloop()

进一步优化,使得界面能显示我们的选择

import tkinter as tk
def select():
    dict = {1:'凯美瑞',2:'帕萨特',3:'迈腾',4:'亚洲龙'}
    strings = '尊敬的车主,您选择了' + dict.get(v.get()) + ',祝您驾驶愉快'
    lable.config(text = strings)
window = tk.Tk()
window.title("车专家")
window.geometry('400x180')

lable = tk.Label(window,font=('微软雅黑', '15','bold'),fg='#43CD80')
lable.pack(side ='bottom')
site = [('凯美瑞',1),
        ('帕萨特',2),
        ('迈腾',3),
        ('亚洲龙',4)]
# IntVar() 用于处理整数类型的变量
v = tk.IntVar()
for name, num in site:
    radio_button = tk.Radiobutton(window,text = name, variable = v,value =num,command = select,indicatoron = False)
    radio_button.pack(anchor ='w')
# 显示窗口
window.mainloop()

运行程序,结果如下图:

在这里插入图片描述

总结

本文主要介绍了tkinter单选控件——Radiobutton控件的使用,后面我们将介绍多选框控件——Checkbutton的使用。

相关文章
|
22天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
11天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
18天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
53 4
|
18天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
26 2
|
14天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
17天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
20天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
16天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
51 3
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
67 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
250 7
Jmeter实现WebSocket协议的接口测试方法