当前位置: 首页 > 编程日记 > 正文

【Python】Radiobutton组件 LabelFrame组件 Entry组件

Radiobutton组件

Radiobutton组件跟Checkbutton组件的用法基本一致,唯一不同的是Radiobutton实现的是“单选”的效果。

要实现这种互斥的效果,同组内的所有Radiobutton只能共享一个variable选项,并且需要设置不同的value选项值。

         注释掉的也是一种方法

import tkinter as tkroot = tk.Tk()
v=tk.IntVar()
#tk.Radiobutton(root,text="One",variable=v,value=1).pack(anchor=tk.W)
#tk.Radiobutton(root,text="Two",variable=v,value=2).pack(anchor=tk.W)
#tk.Radiobutton(root,text="Three",variable=v,value=3).pack(anchor=tk.W)
texts=["One","Two","Three"]
i=1
for text in texts:tk.Radiobutton(root,text=text,variable=v,value=i).pack(anchor=tk.W)i+=1
tk.mainloop()
------------------------------------------------------------------------import tkinter as tkroot = tk.Tk()
v=tk.IntVar()
v.set(1)
#set的括号里是1的话,一开始的默认选项在1;括号里是2的话,默认选项在2;如果超过了4,则没有默认选项
langs = [("One",1),("Two",2),("Three",3)]
for lang,num in langs:tk.Radiobutton(root,text=lang,variable=v,value=num).pack(anchor=tk.W)
tk.mainloop()

也可以把前面的小圆圈换成按钮的形式   

#在for循环进行改动
for text in texts:tk.Radiobutton(root,text=text,variable=v,value=i,indicatoron=False).pack(fill=tk.X)i+=1

LabelFrame组件

LabelFrame组件是Frame框架的进化版,从形态上来说,也就是添加了Label的Frame,有了它,Checkbutton和Radiobutton的组件分组就变得简单了;

import tkinter as tkroot = tk.Tk()
group = tk.LabelFrame(root,text="最好的脚本语言是?",padx=5,pady=5)
group.pack(padx=10,pady=10)
langs=[("python",1),("Perl",2),("Ruby",3),("Lua",4)]
v=tk.IntVar()
v.set(2)
for lang,num in langs:b=tk.Radiobutton(group,text=lang,variable=v,value=num)b.pack(anchor=tk.W)#print(lang," ",num," ",v)tk.mainloop()

Entry组件

Entry组件就是平时所说的输入框。

import tkinter as tkroot = tk.Tk()
#Tkinter总共提供三种布局组件的方法:pack(),grid()和place()
#grid()允许你用表格的形式来管理组件的位置
#row选项代表行,column选项代表列
#例如row=1,column=2表示第二行第三列
photo = tk.PhotoImage(file="E:\\GUI\\background.gif")
tk.Label(root,text="作品:").grid(row=0)
tk.Label(root,text="作者:").grid(row=1)
e1=tk.Entry(root)
e2=tk.Entry(root)
e1.grid(row=0,column=1,padx=15,pady=15)
e2.grid(row=1,column=1,padx=15,pady=15)#该处可以调节窗口大小def show():print("作品《%s》"% e1.get())print("作者:%s"% e2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空#如果表格大于组件,那么可以使用sticky选项来设置组件的位置
#同样需要使用N,E,S,W以及它们的组合NE,SE,SW,NW
tk.Button(root,text="获取信息",width=10,command=show)\.grid(row=2,column=0,sticky=tk.W,padx=10,pady=5)
tk.Button(root,text="退出",width=10,command=root.quit)\.grid(row=2,column=1,sticky=tk.E,padx=10,pady=5)
tk.mainloop()

   可以不停的点击获取信息,直到点击退出为止

如果想要设置一个密码框,即使用“ * ”代替输入的内容,只需要设置show选项即可

import tkinter as tkroot = tk.Tk()
#Tkinter总共提供三种布局组件的方法:pack(),grid()和place()
#grid()允许你用表格的形式来管理组件的位置
#row选项代表行,column选项代表列
#例如row=1,column=2表示第二行第三列
tk.Label(root,text="账号:").grid(row=0)
tk.Label(root,text="密码:").grid(row=1)v1=tk.StringVar()
v2=tk.StringVar()
e1=tk.Entry(root,textvariable=v1)
e2=tk.Entry(root,textvariable=v2,show="*")
'''
e1=tk.Entry(root)
e2=tk.Entry(root,show="*")
'''
e1.grid(row=0,column=1,padx=15,pady=15)
e2.grid(row=1,column=1,padx=15,pady=15)#该处可以调节窗口大小def show():print("账号: %s"% v1.get())print("密码: %s"% v2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空
'''
def show():print("账号: %s"% e1.get())print("密码: %s"% e2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空
'''
#如果表格大于组件,那么可以使用sticky选项来设置组件的位置
#同样需要使用N,E,S,W以及它们的组合NE,SE,SW,NW
tk.Button(root,text="获取信息",width=10,command=show)\.grid(row=2,column=0,sticky=tk.W,padx=10,pady=5)
tk.Button(root,text="退出",width=10,command=root.quit)\.grid(row=2,column=1,sticky=tk.E,padx=10,pady=5)
tk.mainloop()

另外,Entry组件还支持验证输入内容的合法性。(要求输入的是数字,输入字母就是“非法的”)。

实现该功能可以通过:validate,validatecommand,invalidecommmand。

首先用验证的开关是:validate选项。

下表是validate选项可以设置的值

'focus'当Entry组件获得或失去焦点时验证
'focusin'当Entry组件获得焦点的时候验证
'focusout'当Entry组件失去焦点的时候验证
'key'当输入框被编辑的时候验证
'all'当出现上面任何一种情况的时候验证
'none'关闭验证功能。默认设置该选项

其次是validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果。

最后是invalidatecommand选项指定的函数只有在validatecommmand的返回值为False时才会执行。

import tkinter as tkroot = tk.Tk()def test():if e1.get() == "小甲鱼":print("正确")return Trueelse:print("错误")e1.delete(0,END)return Falsev = tk.StringVar()
e1 = tk.Entry(root,textvariable=v,validate="focusout",validatecommand=test)
e2 = tk.Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)tk.mainloop()

Tkinter为验证函数提供了一些额外的选项

'%d'0表示删除操作;1表示插入操作;2表示获得、失去焦点或textvariable变量的值被修改
'%i'

当用户尝试删除或插入操作时,该选项表示插入或删除的位置(索引号)

如果是由于获得、失去焦点或textvariable变量的值被修改而调用验证函数,那么该值是-1

'%P'

当输入框的值允许改变的时候,该值有效

该值为输入框的最新文本内容

'%s'该值为调用验证函数前输入框的文本内容
'%S'

当插入或删除操作触发验证函数的时候,该值有效

该选项表示文本被插入和删除的内容

'%v'该组件当前的validate选项值
'%V'

调用验证函数的原因

该值是'focusin','focusout','key',或'forced'中的一个

'%W'组件的名字
import tkinter as tkroot = tk.Tk()
v=tk.StringVar()def test(content,reason,name):if content == "小甲鱼":print("RIGHT!")print(content,reason,name)return Trueelse:print("WRONG!")print(content,reason,name)return FalsetestCMD = root.register(test)
e1 = tk.Entry(root,textvariable=v,validate="focusout",validatecommand=(testCMD,"%P","%v","%W"))
e2 = tk.Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)tk.mainloop()

相关文章:

索引与联合索引使用注意

索引和联合索引看似很简单但是往往不一定用的对。 假设数据库2个字段a,b都是查询条件 第一个问题:是建立2个索引还是一个联合索引? 第二个问题:如果建立联合索引那么字段的顺序有什么讲究? 原则: 1.如果需要多个字…

用canvas实现一个vue弹幕组件

看B站时,对弹幕的实现产生了兴趣,一开始想到用css3动画去实现,后来感觉这样性能不是很好,查了下资料,发现可以用canvas实现,于是就摸索着写了一个简单的弹幕。弹幕功能支持动态添加弹幕弹幕不重叠自定义弹幕…

系统架构的过程 浮现式设计

系统架构如果设计之初就设计错了,那么必然是南辕北辙。 很多人做系统设计总是东一下,西一下,杂乱无章,想到那是那,然后系统的边界很大,总会有疏漏。 那么系统架构应该怎么设计呢? 首先来说分…

【Python】Listbox组件 Scrollbar组件 Scale组件

Listbox组件 在选项特别多的时候,Listbox是以列表的形式显示出来,并支持滚动条操作,所以在对于需要提供大量选项的情况下会更适用。 from tkinter import * root Tk() theLB Listbox(root,setgridTrue) theLB.pack() for item in ["…

Hive 按某列的部分排序 以及 删列操作

Hive 按某列的部分排序 以及 删列操作 脑袋果然还是智商不足。 涉及到的小需求: 某个表test 有一列 tc: a字符串b字符串c字符串 拼接组成把test表,按b字符串排序 输出遇到的问题: select 里面必须包含 order by 的列按b字符串排序…

docker 安装 RabbitMQ

1、镜像中国(http://www.docker-cn.com/registry-mirror):直接使用https://hub.docker.com下载镜像比较慢,使用镜像中国加速 使用例子:$ docker pull registry.docker-cn.com/library/rabbitmq:3.6-management 2、拉取…

编程容易犯的错

1.数字 比如分页默认从第0页开始,你不了解,写个1,这样数据也出来,但是就是少了第一条,这种错误比较难发现。 写代码对于数字需要敏感,不懂一定要搞懂。 2.参数 多参数做缓存拼凑一个key,之前…

深圳杯---无线回传拓扑规划

B题-无线回传拓扑规划(3人完成) 背景介绍 在城区建设基站,传输光纤部署最后一公里的成本高,光纤到站率低,全球综合来看低于60%;如果使用微波传输,由于微波只能在LOS(视距&#xff0…

Jmeter脚本 GUI和非GUI启动方式

2019独角兽企业重金招聘Python工程师标准>>> 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat 3.添加线程组 在TestPlan节点上右键,Add-->Threads(U…

前端效果参考地址

今天项目内容基本完善,没什么事情,就找了一些插件和好用的css动画,下面将一些链接地址分享出来 1、如果需要写阴影、圆角、渐变、弹性盒子等,请参考一下方式: 点击 2、轮播图、全屏滚动等动画: swiper效果 …

随机变量的数字特征(数学期望,方差,协方差与相关系数)

戳这里:概率论思维导图 !!! 数学期望 离散型随机变量的数学期望 (这里要求级数绝对收敛,若不绝对收敛,则E(X)不存在) 如果有绝对收敛,则有 ,其中 连续型…

Spring @bean冲突解决方案

引用2个jar都实现了相同的bean注入,这个是feign的Level Bean public Level feignLoggerLevel() {return Level.FULL; } 这样报错: escription:xxx required a single bean, but 2 were found:- feignLoggerLevel: defined by method feignLoggerLevel in class p…

javascript中实例方法与类方法的区别

在javascript中,类有静态属性和实例属性之分,也有静态方法和实例方法之分 类属性(静态属性):通过类直接访问,不需要声明类的实例来访问 类方法(静态方法):通过类直接访问…

vue 集成富文本tinymce

开发环境 1. vscode开发语言 1. vue 2. javaScript插件安装 1. npm install tinymce -S 2. 可以使用里面的文件, 下载后可以在node_modules 里面查看如下未目录结构3. 可以将整个结构拷在static里面,为了节省打包后的文件大小可以将tinymce.min.js以cdn方…

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统?一、 C语言文件的操作1、 文件操作的基本方法:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等.向屏幕输出一个信息,例如“Hello”是#include.h>int main(){printf("Hello…

深圳杯---人才吸引力评价模型研究

人才吸引力评价模型研究 在世界各国和全国各地都加大争夺人才的背景下,一个城市要保持其竞争活力和创新力,必须与时俱进地但不盲目地调整相关人才吸引政策。2018年深圳市将加大营商环境改革力度作为一项重要工作,以吸引更多优秀的高新企业和…

不写容易出错的代码

下面2段代码都是完成商品名称的更新,只是第一种情况数据源是list第二种是map 第一代代码是从List里获取第0个 entity.setProduct_name(productList.get(0).getName()); 第二段代码从map里获取键值 entity.setProduct_name(productMap.get(pid).getName())); 如果…

【Vue】IView之table组件化学习(二)

最基本的绑定table是这样的&#xff0c;需要columns和data两个属性。 <template><Card><h4>表格栗子</h4><Table :columns"cols" :data"stuList"></Table></Card> </template><script> export defa…

show-busy-java-threads查找CPU占用高

背景&#xff1a;需要查找线上CPU占用过高的Java线程在做什么。 可以使用top命令找出占CPU高的进程 #top 然后按shiftC 按CPU占比排序 然后把进程中占比高的线程id找出来&#xff0c;这个是常见的套路&#xff0c;但是这样做比较繁琐。 可以使用show-busy-java-threads工具…

了解机器学习的八大专业术语

转自&#xff1a;https://www.sohu.com/a/217453268_178466 1 自然语言处理 自然语言处理对于许多机器学习方法来说是一个常用的概念&#xff0c;它使得计算机理解并使用人所读或所写的语言来执行操作成为了可能。 自然语言处理最重要的最有用的实例&#xff1a; ① 文本分类…

34.TokenInterceptor防止表单重复提交

转自&#xff1a;https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 由于某些原因&#xff0c;用户在进行类似表单提交的操作后&#xff0c;以为表单未被提交&#xff0c;会进行多次的重复提交。为了避免用户多次提交给服务器带来负荷。我们会对表单提交这样的操作进…

使用arthas采集火焰图

火焰图是用图形化的方式来展现profiler工具采集的性能数据&#xff0c;对数据进行统计和分析&#xff0c;方便找出性能热点。 现在我们使用arthas采集JVM的火焰图。 1.首先你需要安装arthas 说是安装其实就是下载解压&#xff0c;arthas是不需要安装的。 下载 — Arthas 3.5…

sudo配置文件详解及实战

2019独角兽企业重金招聘Python工程师标准>>> 安装NGINX之后每次都需要切换ROOT用户做配置文件修改和启动&#xff0c;为了加强安全&#xff0c;ROOT用户一般是不允许直接提供给应用开发人员或者运维人员的&#xff0c;所以需要提供一种方法可以一般用户执行ROOT用户…

Centos中文输入法安装以及切换

鼓捣鼓捣&#xff08;我是一只菜鸟&#xff09;&#xff0c;终于在我的Centos上面装上我的大中华输入法了&#xff0c;哈哈哈哈下面就简单描述下安装过程吧&#xff01;&#xff01;&#xff01;centos6.5用yum安装中文输入法打开终端&#xff0c;进入root用户&#xff08;命令…

【MATLAB】矩阵信息的获取

1、矩阵结构 矩阵的结构是指矩阵子元素的排列方式。 函数名称函数功能isempty(A)检测矩阵是否为空isscalar(A)检测矩阵是否是单元素的标量矩阵isvector(A)检测矩阵是否是只具有一行或一列元素的一维向量issparse(A)检测数组是否是系数矩阵 返回1表示该矩阵是某一特定类型的矩…

Android Gradle Plugin 源码解析(上)

一、源码依赖 本文基于: android gradle plugin版本&#xff1a; com.android.tools.build:gradle:2.3.0 gradle 版本&#xff1a;4.1 Gradle源码总共30个G&#xff0c;为简单起见&#xff0c;方便大家看源码&#xff0c;此处通过gradle依赖的形式来查看源码&#xff0c;依赖源…

Guice系列之用户指南(七)

原文地址&#xff1a;https://code.google.com/p/google-guice/wiki/ToConstructorBindings Constructor Bindings&#xff08;构造器绑定&#xff09;&#xff1a;在父类型上绑定子类实现的构造函数。 贴代码&#xff1a; 12345678910111213141516171819202122232425262728293…

Linux系统火焰图

CentOS7.8 安装perf #yum install perf 执行perf 执行perf record 命令&#xff0c;记录该PID的行为 #perf record -a -g -p 14851 -- sleep 30 --30秒后退出 需要注意后面生成svg图片的所有命令要和当前perf在同一目录&#xff0c;不然会报错。 #perf report 安装git …

深圳杯---垃圾焚烧厂的经济补偿问题

垃圾围城是世界性难题&#xff0c;在今天的中国显得尤为突出。2012年全国城市生活垃圾清运量达到1.71亿吨&#xff0c;比2010年增长了1300万吨。数据显示&#xff0c;目前全国三分之二以上的城市面临垃圾围城问题&#xff0c;垃圾堆放累计侵占土地75万亩。因此&#xff0c;垃圾…

make -j8以及linux下查看cpu的核数

# 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu …