当前位置:首页 » tkinter » 正文

tkinter的单选框按钮radiobutton图示讲解

Radiobutton创建及分组

今天来讲讲单选框按钮(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()

判断Radiobutton的选择状态

  上面的完整代码里,布局定位都是用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()

运行结果如下:

              1.JPG

点击判断按钮,绑定的事件会根据这一组单选按钮共用的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()

运行后,点击任何一个单选按钮,都会直接告知哪一个被选中。    丶丌皛

 改变Radiobutton的样式,让它变成像个按钮的样子

单选按钮,可以改变样式,变得像一个普通按钮的样子,改变样式的参数是: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()

运行结果如下:

   2.JPG

让Radiobutton组件显示图片

单选按钮,不但可以变得像普通按钮一样,也可以普通按钮一样,可以建立只显示图像的单选按钮,或者建立图像和文本混合在一起的单选按钮。这跟普通按钮的参数,用法完全一致,稍微讲解一下。

以下代码,先用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()

运行结果:

3.JPG

运行结果,就跟一般的按钮是一样的,有图像又有文字时,图像优先显示,文字不显示。除非用另外一个参数 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()

运行结果如下:

4.JPG

创建多个Radiobutton组件

如果要创建的单选按钮比较多,用循环语句来创建比较省事。如:

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列表,然后用循环创建单选按钮。运行结果如下:

5.JPG

    单选按钮就讲解到这里,下一篇文章讲解多选按钮checkbutton,想提前看到相关文章,请来 wb98.com 济亨网


来源:济亨网

本文链接:http://wb98.com/post/308.html

    << 上一篇 下一篇 >>

    湘公网安备 43011102000514号 - 湘ICP备08100508号