[译][Tkinter 教程06] Checkbox 控件

news/2025/5/18 13:20:05
已获原作者授权. 原系列地址: Python Tkinter

简介

Checkbox 控件允许用户在多个选项中选择多项. Radiobutton 则只允许用户选择一项.
通常, Checkbox 会显示为一个空白的方框 (表示 false, 未被选中), 或者方框中有一个对号或X号 (表示 true, 被选中). 一个对该选项的简短描述会和选择框一同显示. checkbox 的状态会因点击而改变, 这个点击可能来自鼠标, 也可能来自键盘热键, 比如空格键通常被设置为 checkbox 的选择键.
一个 checkbox 有两种状态: 开 或者 关.
Tkinter 中的 checkbox 可以包含文字, 可多行显示, 但只能使用预设字体; 也可以包含图片. 可以绑定一个 Python 函数或方法. 当 checkbox 被点击时, 该函数或方法会被调用.

简单例子

下例中展示了两个 checkbox: 男和女 ("male" 和 "female"). 每个 checkbox 都和一个不同的变量相关联 (IntVar()).

from tkinter import *
master = Tk()
var1 = IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=0, sticky=W)
var2 = IntVar()
Checkbutton(master, text="female", variable=var2).grid(row=1, sticky=W)
mainloop()

上面的代码会显示如下窗口:
图1

我们可以对上例进行改进. 首先我们加入一个 Label 控件. 然后我们加入两个 Button 控件, 一个用来退出应用, 一个用来查看每个 checkbox 所关联的变量的值.

from tkinter import *
master = Tk()def var_states():print("male: %d,\nfemale: %d" % (var1.get(), var2.get()))Label(master, text="Your sex:").grid(row=0, sticky=W)
var1 = IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=1, sticky=W)
var2 = IntVar()
Checkbutton(master, text="female", variable=var2).grid(row=2, sticky=W)
Button(master, text='Quit', command=master.quit).grid(row=3, sticky=W, pady=4)
Button(master, text='Show', command=var_states).grid(row=4, sticky=W, pady=4)
mainloop()

上面的代码显示如下窗口:
图2

如果我们勾选 "male" 选项, 然后点击 "show" 按钮, 我们会得到下面的输出:

male: 1,
female: 0

另一个例子

编写一个应用, 用 checkbox 来描述一些编程语言, 比如 Python, Ruby, Perl, C++, 和一些自然语言, 比如 English, German. 这样用户就可以在其中挑选出编程语言和自然语言. 然后再在其中加入两个按钮, 一个用来退出应用, 一个用来查看 checkbox 的取值状态.

#!/usr/bin/python3from tkinter import *
class Checkbar(Frame):def __init__(self, parent=None, picks=[], side=LEFT, anchor=W):Frame.__init__(self, parent)self.vars = []for pick in picks:var = IntVar()chk = Checkbutton(self, text=pick, variable=var)chk.pack(side=side, anchor=anchor, expand=YES)self.vars.append(var)def state(self):return map((lambda var: var.get()), self.vars)
if __name__ == '__main__':root = Tk()lng = Checkbar(root, ['Python', 'Ruby', 'Perl', 'C++'])tgl = Checkbar(root, ['English','German'])lng.pack(side=TOP,  fill=X)tgl.pack(side=LEFT)lng.config(relief=GROOVE, bd=2)def allstates(): print(list(lng.state()), list(tgl.state()))Button(root, text='Quit', command=root.quit).pack(side=RIGHT)Button(root, text='Peek', command=allstates).pack(side=RIGHT)root.mainloop()

上面的代码输出如下窗口:
图3


全系列:
[译][Tkinter 教程01] 入门: Label 控件
[译][Tkinter 教程02] Message 控件
[译][Tkinter 教程03] Button 控件
[译][Tkinter 教程04] Variable 类
[译][Tinkter 教程05] Radiobutton 控件
[译][Tkinter 教程06] Checkbox 控件
[译][Tkinter 教程07] Entry 控件
[译][Tkinter 教程08] Canvas 图形绘制
[译][Tkinter 教程09] Scale 控件
[译][Tkinter 教程10] Text 控件
[译][Tkinter 教程11] 对话框和消息框
[译][Tkinter 教程12] 布局管理 (Pack Place Grid)
[译][Tkinter 教程13] Mastermind 游戏
[译][Tkinter 教程14] menu 菜单
[译][Tkinter 教程15] event 事件绑定
译者水平有限, 如有疏漏, 欢迎指正.
已获得原作者授权. 原文地址: Checkboxes
文章来源:https://blog.csdn.net/weixin_34307464/article/details/88835658
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-931122.html

相关文章

模块的导入顺序细节

模块导入过程分析 第一次导入的优厚待遇: 1、将被导入模块进行预编译,形成相对应的pyc文件。 2、进入被导入模块,执行模块文件内部代码,同时生成模块相对应的全局名称空间。 3、在使用模块的文件中,产生一个与模块名同…

字符串 替换 华为 java_2014华为机试-字符串替换

题目要求:输入一个字符串,然后在输入一个整数,就是替换字符串的次数,然后依次输入须要替换的字符串……比如:输入:asdfghjasdfghj3as->bnmdf->qwegh->yui输出:bnmqweyuijbnmqweyuij意思…

深入理解SVM之对偶问题

1. 支持向量机的目的是什么?对于用于分类的支持向量机来说,给定一个包含正例和反例(正样本点和负样本点)的样本集合,支持向量机的目的是寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平面分开&…

DataPipeline的增量数据支持回滚功能

DataPipeline的增量数据支持回滚功能 第一步:数据任务有增量数据时,回滚按钮激活,允许用户使用该功能进行数据回滚。 第二步:点击回滚按钮,允许用户选择回滚时间或者回滚位置进行数据回滚。选择按时间回滚,…

python 图标字体_Python fontawesome

最新项目狮身人面像##################这是狮身人面像的延伸。添加使用fontawesome的指令安装----:PIP安装Sphinx_Fontawesome或...2021-02-19已阅读: n次查找:fa-coffee:之类内容并替换他们的字体可怕的图标标记。将fontawesome_markdown添加到降价呼叫中&#xff…

厉害了,Apache架构师们遵循的 30 条设计原则

作者:Srinath 翻译:贺卓凡,来源:公众号ImportSourceSrinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。Srinath认为架构师应该…

第一封情书

2019独角兽企业重金招聘Python工程师标准>>> 小小铭同学: 我说我要写一封情书给你 懒得去百度查情书是什么样的格式,什么样的内容。不管我写的是不是有样式的情书,就当是自己特色的情书吧。 有几句话,其实在我心里很久…

关于图片上传方法汇总

// 方法- base64位 ajax post上传 缺点当图片过大的时候上传不了,tomact默认post 2M限制 需修改后台配置maxPostSize-1 function getImageBase64(img, ext) { var canvas document.createElement("canvas"); //创建canvas DOM元素,并设置其宽…

java 运算符%_Java运算符

Java语言中的表达式是由运算符与操作数组合而成的,所谓的运算符就是用来做运算的符号。在Java中的运算符,基本上可分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、转型运算符等。一、算术运算符 所谓算术运算符,也就是…

innerWidth outerWidth

在jQuery中: 一、width()方法用于获得元素宽度; 二、innerWidth()方法用于获得包括内边界(padding)的元素宽度; 三、outerWidth()方法用于获得包括内边界(padding)和边框(border)的元素宽度,如果outerWidth()方法的参数为true则外…