1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python tkinter - 第8章 单选按钮控件(Radiobutton)属性

Python tkinter - 第8章 单选按钮控件(Radiobutton)属性

时间:2023-10-08 14:11:20

相关推荐

Python tkinter - 第8章 单选按钮控件(Radiobutton)属性

第8章 单选按钮控件(Radiobutton)

Radiobutton,可以叫做单选按钮,无线按钮或者勾选按钮。单选按钮的功能是是实现多选一,从多个待选项中选择一个。 单选按钮的提示信息可以是文字或者图像,单选按钮的外观也有多种样式。为了能够更加灵活的处理单选按钮,还可以绑定一个回调函数,用来处理复杂的情况。当单选按钮被点击的时候,系统会自动调用这个函数。

单选按钮的文字只能使用一种字体。如果提示的文本信息太长,可以折行显示。还可以对其中的一个字符设置下划线,用来表示快捷键。默认情况下,可以使用Tab键移动焦点到单选按钮控件上。

每一组单选按钮只能和同一个变量关联。每个选项代表这个变量可能取值中的一个。这些取值不能重复,重复的单选按钮也没有任何的意义。

8.1 单选按钮控件属性

import tkinter as tkroot=tk.Tk()root.geometry('300x240')b1 = tk.Radiobutton(root,text='选择1',activebackground='red',activeforeground='yellow')b1.pack()root.mainloop()

结果:

8.1.2 anchor

设置如何显示文本或者图像提示信息。可选项有:N, NE, E, SE, S, SW, W, NW, CENTER。如果是使用字符串直接赋值,需要小写字母。比如anchor=’ne’。

anchor属性如果要起作用,在使用pack布局管理器,需要设置expand=True以及fill=X、fill=Y或者fill=BOTH。否则anchor很可能没有效果。

如果使用grid布局管理器,需要设置rowconfigure和columnconfigure,同时设置sticky=’nsew’。详细的见代码说明。

pack布局管理代码:

import tkinter as tkroot=tk.Tk()root.geometry('300x240')b1 = tk.Radiobutton(root,text='选择1',anchor=tk.S+tk.W)b1.pack(fill=tk.BOTH,expand=True)root.mainloop()

结果:

说明:fill=tk.BOTH和expand=True的作用是让子控件可以充满整个窗口。

grid布局管理代码:

import tkinter as tkroot=tk.Tk()root.geometry('300x240')root.rowconfigure(0, weight=1)root.columnconfigure(0, weight=1)b1 = tk.Radiobutton(root,text='选择1',anchor=tk.S+tk.W)b1.grid(row=0,column=0,sticky='nsew')root.mainloop()

结果:

说明:root.rowconfigure(0, weight=1)和root.columnconfigure(0, weight=1)是让单元格可以充满整个窗口。b1.grid(row=0,column=0,sticky=‘nsew’)是让单元格在左下角。实际上起作用的是sticky,而不是anchor。

tkinter提供了多种的对齐方式,有的需要组合才能实现控件在指定的位置出现。这是tkinter的弱势之一,另外一个弱势是速度有点慢。

8.1.3 background(bg)

background的属性是设置单选按钮的背景颜色。bg是缩写格式。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',bg='red',variable=color,value=0)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.4 foreground(fg)

设置单选按钮文本的颜色。fg是缩写格式。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',fg='red',variable=color,value=0)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',fg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',fg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.5 font

设置文本的字体。跟前面的章节设置方法是一样的,只能设置一种字体。详细说明见3.3.3节

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',fg='red',font=('times',20,'bold'))b1.pack()root.mainloop()

结果:

8.1.6 bitmap

用一种早期的图像格式来显示提示信息,已经被image取代。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,bitmap='error')b1.pack()root.mainloop()

结果:

8.1.7 borderwidth(bd)

设置边框的宽度。默认的边框是1或者2,单位是像素。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='边框',bd=20)b1.pack()root.mainloop()

结果:

图一是没有设置边框的情况,使用的默认值是2。图二是设置边框为20,可以看见单选按钮明显下移。多出来的就是边框的宽度。

8.1.8 state 和disabledforeground

state是设置单选按钮的状态。一共有三种:NORMAL、ACTIVE和DISABLED。NORMAL和ACTIVE状态下,单选按钮都可以正常使用。DISABLED状态下,单选按钮不能使用或者选择。而disabledforeground是设置在DISABLED状态下单选按钮的提示文字颜色的,也就是说,在单选按钮被禁止使用的情况下,可以通过这个属性来提示用户。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='选择1',state='disabled',disabledforeground='red')b1.pack()root.mainloop()

结果:

说明:在state=’disabled’的时候,设置disabledforeground可以改变提示文本的颜色。

8.1.9 highlightcolor、highlightbackground和highlightthickness

这三个属性是处理单选按钮获得与失去输入焦点时候的边框的背景颜色、高亮颜色以及边框的宽度。不过highlightcolor和highlightbackground在单选按钮中不起作用。highlightthickness是有效果的,可以增加边框的宽度。

8.1.10 selectcolor

单选按钮的指示符背景色。默认是白色的。可以通过设置此选项设置指示符的颜色。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',bg='red',variable=color,value=0,selectcolor='yellow')b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.11 image和selectimage

image是用图像来代替文本作为提示信息。selectimage用来显示当单选按钮被选中时的图片。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()aimage=tk.PhotoImage(file='a.gif')bimage=tk.PhotoImage(file='b.gif')b1 = tk.Radiobutton(root,image=aimage,bg='red',variable=color,value=0,selectimage=bimage)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.12 cursor

鼠标经过单选按钮时的形状,详细的说明见3.3.6节。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',bg='red',variable=color,value=0,cursor='spider')b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

说明:cursor只对一个单选按钮起作用,对同组的其他单选按钮,没有效果。

8.1.13 overrelief 和 relief

relief是设置单选按钮的显示效果。overrelief是在鼠标经过时单选按钮时的显示效果。关于relief的说明见3.3.5节

import tkinter as tkroot=tk.Tk()root.geometry('300x240')b1 = tk.Radiobutton(root,bg='red',text='红色',relief='flat',bd=5)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',relief='flat',overrelief='groove',bd=5)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',relief='flat',bd=5)b3.pack()root.mainloop()

结果:

说明:1. 正常的显示是’flat’,由relief设定。

当鼠标经过单选按钮区域时,外观会发生变化。比如示例中就显示为GROOVE的效果。这个属性由overrelief设置。

8.1.14 indicatoron 和 offrelief

正常的情况下,使用单选按钮都是有指示符的,就是在提示文字前面的圆形按钮。不过也可以不用这个指示符,而使用按压式按钮的形式。就是按钮被按下表示被选中,按钮弹起表示没有被选中。默认情况下,indicatoron是False,表示使用指示符。如果设为True,就不使用指示符。

在不使用指示符的情况下,可以通过设定offrelief来设置按钮没有被选中时候的效果,此时上一节介绍的relief就没有作用了。

为了突出显示效果,最好把边框值设定的大一些。默认值是2,建议设置bd>5。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,text='红色',bg='red',bd=5,indicatoron=False,variable=color,value=0,offrelief='groove',relief='flat')b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',bd=5,indicatoron=False,variable=color,value=1,offrelief='groove',relief='flat')b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',bd=5,indicatoron=False,variable=color,value=2,offrelief='groove',relief='flat')b3.pack()root.mainloop()

结果:

说明:1. indicatoron=False时,单选按钮没有通常的指示符。offrelief的设置起作用,而relief则没有效果了。offrelief=’groove’而relief=’flat’,可以看到最终的效果是GROOVE。

8.1.15 padx和pady

padx和pady是分别定义白在水平和垂直方向上的内边距。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,padx=10,pady=15,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.16 compound

compound设置如何在使用图片作为提示信息的时候叠加文字的方法。有5个选项:

LEFT,RIGHT,TOP,BOTTOM,CENTER

如果没有设置compound是无法同时显示文字和图片的。显示的优先级是image > bitmap >text

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()a=tk.PhotoImage(file='a.gif')b1 = tk.Radiobutton(root,image=a,compound=tk.TOP,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.17 height 和width

分别设置单选按钮的长度和宽度。width的单位是字符,height的单位是行。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,height=2,width=3,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.18 takefocus

takefocus的作用是定义单选按钮是否可以使用Tab键获得输入焦点。默认情况下是可以。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()b1 = tk.Radiobutton(root,takefocus=0,height=2,width=3,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,takefocus=1,text='蓝色',bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

说明:

‘红色’的单选按钮是无法用Tab获得输入焦点的

‘蓝色’的单选按钮可以获得输入焦点,因为takefocus=1

‘绿色’的单选按钮也可以获得输入焦点,因为默认值是1。

8.1.19 text和textvariable

有两种方法设置单选按钮的提示文字。一种是使用text,另外一种是使用textvariable。这个属性不是单选按钮的取值,仅仅设置单选按钮的提示文字。

text属性是直接赋值就可以了。textvariable需要通过修改与textvariable关联的StringVar对象达到赋值提示文字的作用。

如何动态修改提示文字?也是有两种方法:

(1)radio[‘text’]=’提示文字’

(2)strvar.set(‘提示文字’)。strvar是一个StringVar对象,与textvariable相关联。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,height=2,width=3,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,bg='red',text='红色',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()def change_text():b1['text']='提示文字'strvar.set('提示文字')b4=tk.Button(root,text='修改提示文字',command=change_text)b4.pack()root.mainloop()

结果:

说明:代码2中,如果点击’修改提示文字’按钮就会修改红色和蓝色的单选按钮的提示文字。

8.1.20 underline

在第几个提示文字下面标识下划线。0表示第一个字符,1,表示第二个字符,以此类推。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,bg='red',underline=3,text='红色的文字',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

8.1.21 wraplength

设置折行显示。在没有规定width和height的情况下,控件会自动计算提示文字的大小并显示。但是在规定了width的情况下,如果提示文字过长,会有部分文字无法显示。这个时候,可以通过设置wraplength来折行显示。但是如果height的行数设置不够,还是会发生字符不能显示的情况。注意wraplength的单位是像素,而不是字符。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,takefocus=0,height=5,width=3,bg='red',underline=3,text='红色的文字很长的文字',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,takefocus=1,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,bg='red',height=5,width=3,wraplength=90,justify='left',text='红色的文字很长的文字',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()strvar.set('蓝色')b1 = tk.Radiobutton(root,bg='red',height=5,width=3,wraplength=40,justify='left',text='红色的文字很长的文字',variable=color,value=0,)b1.pack()b2 = tk.Radiobutton(root,textvariable=strvar,bg='blue',variable=color,value=1)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2)b3.pack()root.mainloop()

结果:

说明:

代码1的情况就是单选按钮的width不够宽,因而无法显示全部的提示文字。

代码2的情况是设置了wraplength后,显示折行。但是由于width不够宽,还是不能显示全部的内容。

代码3的情况是显示了全部的文字。

8.1.21 justify

justify是在折行的情况下定义如何对齐,有三种方式:CENTER,LEFT和RIGHT。详细的说明见第四章。

8.1.22 command 和value、variable

command是定义单选按钮的回调函数。当触发该单选按钮时,会调用相应的函数。而value是定义单选按钮的取值。一般的情况下,会定义一个整形数给单选按钮。不过也可以定义其他的数值,比如字符串。variable是与一个变量相关联,可以获取单选按钮的取值。注意,同一组的多个单选按钮是使用同一个与variable相关联变量的。

import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.IntVar()strvar=tk.StringVar()b4=tk.Entry(root,textvariable=strvar)def radio():strvar.set(color.get())b1 = tk.Radiobutton(root,bg='red',text='红色',variable=color,value=0,command=radio)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value=1,command=radio)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value=2,command=radio)b3.pack()b4.pack() root.mainloop()import tkinter as tkroot=tk.Tk()root.geometry('300x240')color=tk.StringVar()color.set('red')strvar=tk.StringVar()b4=tk.Entry(root,textvariable=strvar)def radio():strvar.set(color.get())b1 = tk.Radiobutton(root,bg='red',text='红色',variable=color,value='red',command=radio)b1.pack()b2 = tk.Radiobutton(root,text='蓝色',bg='blue',variable=color,value='blue',command=radio)b2.pack()b3 = tk.Radiobutton(root,text='绿色',bg='green',variable=color,value='green',command=radio)b3.pack()b4.pack() root.mainloop()

结果:

选中不同的单选按钮,就会在输入框中显示不同的值。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。