五笔打字通主页
今天来讲讲单选框按钮(radiobutton),既然它也叫按钮,那么它的很属性方法都跟按钮是一样的,在这里,我就不讲它跟按钮的相同的属性,而专门讲一下它跟一般按钮不同的地方。
单选按钮的特点就是,当一组单选按钮中的一个被选中,其它的单选按钮自动清除。这里要注意,这些单选按钮必须是一组,那如何分组呢,下面我就来讲一下。
语法:Radiobutton(父组件,其它属性参数…..)
如果只是创建2个单选按钮,以下代码就行:
ra1=Radiobutton(root,text='足球') ra1.grid() ra2=Radiobutton(root,text='排球') ra2.grid()
但是这2个单选按钮没有分组,它们是完全不相关的2个按钮。
要分组就要牵出variable这个属性,这个属性要绑定一个变量(字符串变量和整型变量都行)
ra1=Radiobutton(root,text='足球',variable=var) ra2=Radiobutton(root,text='排球',variable=var)
以上代码,2个单选按钮variable绑定为相同的一个变量var,就说明它们分在同一组。
但如何在程序里分辨是哪个单选按钮被选中了呢?这就要value这个属性来决定。
ra1=Radiobutton(root,text='足球',variable=var,value=0) ra2=Radiobutton(root,text='排球',variable=var,value=1)
上面的代码用value=0和value=1就区分了2个单选按钮,当然value取值也可以取字符串。
下面的代码就是创建3个同一组的单选按钮,并且在创建前先创建一个变量,用这个变量先让第2个单选按钮被选中。
from tkinter import * root=Tk() var=IntVar(value=1) # 创建变量var,并预先选中value为1的单选按钮 ra1=Radiobutton(root,text='足球',variable=var,value=0) ra1.grid() ra2=Radiobutton(root,text='排球',variable=var,value=1) ra2.grid() ra3=Radiobutton(root,text='篮球',variable=var,value=2) ra3.grid() root.mainloop()
上面代码预选选中ra2这个单选按钮用的代码是:
var=IntVar(value=1)
也可以分解为2行代码:
var=IntVar() var.set(1)
还有一个方法 select() ,以下代码要用在创建完单行按钮以后。wb98.com
ra2.select()
上面的完整代码里,布局定位都是用grid(),没有用参数,系统会自动先引用参数row=0,column=0,然后引用row=1,column=0,再引用row=2,column=0,以此类推。
以下我们增加一个按钮,用按钮绑定的事件来判断是哪一个单选按钮被选中。完整代码如下:
from tkinter import * root=Tk() def selectjob(): if var.get()==0: # 获取变量的值与单选按钮的value来对比 print('ra1被选中') elif var.get()==1: print('ra2被选中') else: print('ra3被选中') var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) ra1=Radiobutton(root,text='足球',variable=var,value=0) ra1.grid() ra2=Radiobutton(root,text='排球',variable=var,value=1) ra2.grid() ra3=Radiobutton(root,text='篮球',variable=var,value=2) ra3.grid() # ra2.select() 也可以在这里用select来预先选中某个按钮 but1=Button(root,text="判断",command=selectjob) but1.grid() root.mainloop()
运行结果如下:
点击判断按钮,绑定的事件会根据这一组单选按钮共用的var变量的获取值,跟单选按钮的value值对比,来判断是哪一个单选按钮被选中了。
variable绑定的变量也可以是字符串变量,相应地,value就要取一个字符串,当然这个字符串要唯一,不要取相同的字符串,否则无法区别是哪一个单选按钮。下面我把上面的代码改成字符串变量来绑定。
from tkinter import * root=Tk() # 来自wb98.com def selectjob(): if var.get()=='足球': # 获取变量的值与单选按钮的value来对比 print('ra1被选中') elif var.get()=='排球': print('ra2被选中') else: print('ra3被选中') var=StringVar() # 创建变量var,并预先选中value为2的单选按钮 var.set('排球') # 上面取了字符串变量,这里也要改成预设置字符串 ra1=Radiobutton(root,text='足球',variable=var,value='足球') # value改成字符串 ra1.grid() ra2=Radiobutton(root,text='排球',variable=var,value='排球') ra2.grid() ra3=Radiobutton(root,text='篮球',variable=var,value='篮球') ra3.grid() # ra2.select() 也可以在这里用select来预先选中某个按钮 but1=Button(root,text="判断",command=selectjob) but1.grid() root.mainloop()
其实,也可以不需要增加这个“判断”按钮来判断,因为单选按钮也是按钮,它也有一个command属性,下面我们就用这个属性来判断哪个单选按钮被选中。下面是修改的代码,去除了按钮,创建单选按钮时,都增加了command这个参数:
from tkinter import * root=Tk() def selectjob(): if var.get()==0: # 获取变量的值与单选按钮的value来对比 print('ra1被选中') elif var.get()==1: print('ra2被选中') else: print('ra3被选中') var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) ra1=Radiobutton(root,text='足球',variable=var,value=0,command=selectjob) ra1.grid() ra2=Radiobutton(root,text='排球',variable=var,value=1,command=selectjob) ra2.grid() ra3=Radiobutton(root,text='篮球',variable=var,value=2,command=selectjob) ra3.grid() root.mainloop()
运行后,点击任何一个单选按钮,都会直接告知哪一个被选中。 丶丌皛
单选按钮,可以改变样式,变得像一个普通按钮的样子,改变样式的参数是:indicatoron 只要设置为0,就可以改变。
from tkinter import * root=Tk() var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) ra1=Radiobutton(root,text='足球',variable=var,value=0,indicatoron=0) ra1.grid() ra2=Radiobutton(root,text='排球',variable=var,value=1,indicatoron=0) ra2.grid() ra3=Radiobutton(root,text='篮球',variable=var,value=2,indicatoron=0) ra3.grid() root.mainloop()
运行结果如下:
单选按钮,不但可以变得像普通按钮一样,也可以普通按钮一样,可以建立只显示图像的单选按钮,或者建立图像和文本混合在一起的单选按钮。这跟普通按钮的参数,用法完全一致,稍微讲解一下。
以下代码,先用PhotoImage方法生成图像对象img1,img2,img3,然后在创建单选按钮里,加入参数image,以下是3个图片资源和代码:
from tkinter import * root=Tk() var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) img1=PhotoImage(file='dfg.png') img2=PhotoImage(file='dfi.png') img3=PhotoImage(file='ebn.png') ra1=Radiobutton(root,text='米饭',image=img1,variable=var,value=0) ra1.grid() ra2=Radiobutton(root,text='西瓜',image=img2,variable=var,value=1) ra2.grid() ra3=Radiobutton(root,text='鲜花',image=img3,variable=var,value=2) ra3.grid() root.mainloop()
运行结果:
运行结果,就跟一般的按钮是一样的,有图像又有文字时,图像优先显示,文字不显示。除非用另外一个参数 compound来设置图像和文字的位置关系。下面的代码,我们用compound='left’ 让图像在文字的左边显示。
from tkinter import * root=Tk() var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) img1=PhotoImage(file='dfg.png') img2=PhotoImage(file='dfi.png') img3=PhotoImage(file='ebn.png') ra1=Radiobutton(root,text='米饭',image=img1,compound='left',variable=var,value=0) ra1.grid() ra2=Radiobutton(root,text='西瓜',image=img2,compound='left',variable=var,value=1) ra2.grid() ra3=Radiobutton(root,text='鲜花',image=img3,compound='left',variable=var,value=2) ra3.grid() root.mainloop()
运行结果如下:
如果要创建的单选按钮比较多,用循环语句来创建比较省事。如:
from tkinter import * def selectjob(): print(var.get()) # 获取选择的选项 root=Tk() var=IntVar() # 创建变量var,并预先选中value为2的单选按钮 var.set(1) list1=['足球','排球','篮球','乒乓球','体操','举重','田径','游泳','射击','拳击'] for index,item in enumerate(list1): # 用for循环和enumerate函数实现同时输出索引和列表元素内容 ra1=Radiobutton(root,text=item,variable=var,value=index+1,command=selectjob) ra1.grid(sticky=W) root.mainloop()
上面的代码,先准备单选按钮文本的list1列表,然后用循环创建单选按钮。运行结果如下:
单选按钮就讲解到这里,下一篇文章讲解多选按钮checkbutton,想提前看到相关文章,请来 wb98.com 济亨网
来源:济亨网
本文链接:https://wb98.com/post/308.html