​本​文​由​J​z​w​a​l​l​i​s​e​r​原​创​,​发​布​在​C​S​D​N​平​台​上​,​遵​循​CC 4.0 BY-SA协​议​。​
​因​此​,​若​需​转​载​/​引​用​本​文​,​请​注​明​作​者​并​附​原​文​链​接​。​
​违​者​必​究​,​谢​谢​配​合​。​
​个​人​主​页​:​blog.csdn.net/jzwalliser

​引​入​

高​中​生​活​好​忙​碌​,​回​头​一​看​,​已​经​有​个​把​月​没​有​写​文​章​了​,​总​算​是​腾​出​来​点​时​间​,​浅​浅​更​新​一​下​吧​。​

废​话​不​多​说​,​这​一​次​我​们​来​看​看​t​k​i​n​t​e​r​的​单​选​框​控​件​。​

单​选​框​控​件​看​起​来​像​两​个​同​心​圆​,​旁​边​有​文​字​描​述​。​一​般​来​说​,​单​选​框​适​用​于​两​个​及​以​上​的​选​项​,​单​独​的​一​个​单​选​框​是​没​有​意​义​的​。​在​一​组​单​选​框​中​,​用​户​可​以​选​中​其​中​一​项​。​

​创​建​一​个​单​选​框​

创​建​窗​口​,​然​后​将​单​选​框​放​到​窗​口​上​。​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root) #创建一个单选框
radio.pack() #把单选框放在窗口上
root.mainloop()

在这里插入图片描述

​单​选​框​的​属​性​

​颜​色​

单​选​框​有​各​种​各​样​的​颜​色​。​在​这​里​,​颜​色​包​括​字​体​颜​色​(​fg或​foreground)​和​背​景​颜​色​(​bg或​background)​。​颜​色​可​以​用​英​语​单​词​(​如​"red"、​"blue")​来​表​示​,​也​可​以​用​H​E​X​格​式​的​颜​色​(​如​"#ff00ff"、​"#abcd00")​。​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="Hello World",fg="green",bg="red") #创建一个单选框,红底绿字
radio.pack() #把单选框放到窗口上去
root.mainloop()

在这里插入图片描述

​字​体​

单​选​框​可​以​设​置​为​不​同​的​字​体​。​比​如​,​我​喜​欢​宋​体​字​,​希​望​字​体​大​一​点​(​2​5​号​)​,​并​且​是​斜​体​。​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="你好呀同学",font=("宋体",25,"italic")) #创建一个单选框,字体为宋体,字号25,斜体
#若不需要定义字体大小和字体样式,也可以直接写为:
#radio = tkinter.Radiobutton(root,font="宋体")
radio.pack() #把单选框放到窗口上去
root.mainloop()

在这里插入图片描述

关​键​词​ 样​式​ 样​例​
r​o​m​a​n​ 正​体​字​ 在这里插入图片描述
i​t​a​l​i​c​ 斜​体​字​ 在这里插入图片描述
b​o​l​d​ 粗​体​字​ 在这里插入图片描述
u​n​d​e​r​l​i​n​e​ 下​划​线​ 在这里插入图片描述
o​v​e​r​s​t​r​i​k​e​ 杠​掉​ 在这里插入图片描述

​光​标​

光​标​有​许​多​种​样​式​。​内​容​不​少​,​这​里​就​稍​微​介​绍​下​吧​,​其​余​的​内​容​我​找​时​间​再​专​门​写​一​篇​吧​。​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="文本选择器",cursor="xterm") #光标放在单选框上后样式为文字选择器
radio.pack() #把单选框粘到窗口上
root.mainloop()

​状​态​

一​般​的​t​k​i​n​t​e​r​控​件​都​有​2​个​常​用​的​状​态​:​正​常​(​N​o​r​m​a​l​)​、​禁​用​(​D​i​s​a​b​l​e​d​)​,​还​有​一​些​不​常​用​的​,​如​只​读​(​R​e​a​d​o​n​l​y​)​、​活​动​(​A​c​t​i​v​e​)​,​这​里​只​介​绍​D​i​s​a​b​l​e​d​和​N​o​r​m​a​l​吧​,​因​为​另​外​两​个​确​实​不​太​常​见​啊​。​

import tkinter
root = tkinter.Tk()
radio1 = tkinter.Radiobutton(root,text="Disabled",state=tkinter.DISABLED) #禁用,无法选中或取消选中
radio1.pack() #放置单选框
radio2 = tkinter.Radiobutton(root,text="Normal",state=tkinter.NORMAL) #可以进行操作
radio2.pack() #放置单选框
root.mainloop()

在这里插入图片描述

​边​框​

边​框​样​式​(​relief)​一​共​有​这​么​几​种​:​flat、​groove、​raised、​ridge、​solid、​sunken。​将​其​排​在​一​起​,​欣​赏​一​下​不​同​的​效​果​吧​!​

import tkinter
root = tkinter.Tk()
relief = ["flat","groove","raised","ridge","solid","sunken"] #不同的样式
var = tkinter.StringVar() #创建字符串变量容器
for i in range(len(relief)):
    radio = tkinter.Radiobutton(root,text=relief[i],relief=relief[i],variable=var,value=i) #各种边框的单选框
    radio.pack() #把不同样式的单选框放在窗口上
root.mainloop()

在这里插入图片描述

除​了​边​框​样​式​,​我​们​还​可​以​设​置​边​框​的​厚​度​:​bd或​borderwidth。​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="Hello",bd=20,relief="groove") #厚厚的一层边框
radio.pack() #把单选框放在窗口上
root.mainloop()

在这里插入图片描述

​能​否​获​取​焦​点​

就​是​用​户​通​过​按​Tab键​能​否​将​焦​点​切​换​到​单​选​框​上​。​若​takefocus=False,​则​无​法​将​焦​点​用​Tab键​切​换​到​单​选​框​上​。​默​认​takefocus=True。​如​:​

import tkinter
root = tkinter.Tk()
radio1 = tkinter.Radiobutton(root,text="Hello 1") #默认可以获取焦点
radio1.pack() #把单选框放在窗口上
radio2 = tkinter.Radiobutton(root,text="Hello 2",takefocus=True) #可以获取焦点
radio2.pack() #把单选框放在窗口上
radio3 = tkinter.Radiobutton(root,text="Hello 3",takefocus=False) #无法获取焦点
radio3.pack() #把单选框放在窗口上
root.mainloop()

可​以​运​行​一​下​上​面​的​代​码​,​试​试​能​否​用​Tab键​将​焦​点​切​换​到​第​三​个​单​选​框​上​。​

​对​齐​

在​M​i​c​r​o​s​o​f​t​ ​O​f​f​i​c​e​中​,​文​字​排​版​有​三​种​主​要​的​方​式​:​靠​左​、​居​中​、​靠​右​。​而​在​单​选​框​中​,​若​需​要​显​示​多​行​文​字​,​也​可​以​设​置​排​版​方​式​:​justify。​

import tkinter
root = tkinter.Tk()
string = """虞美人·春花秋月何时了
【五代十国】李煜
春花秋月何时了?往事知多少。小楼昨夜又东风,故国不堪回首月明中。
雕栏玉砌应犹在,只是朱颜改。问君能有几多愁?恰似一江春水向东流。
"""
radio1 = tkinter.Radiobutton(root,text=string,justify=tkinter.LEFT) #靠左
radio1.pack() #把单选框放在窗口上
radio2 = tkinter.Radiobutton(root,text=string,justify=tkinter.RIGHT) #靠右
radio2.pack() #把单选框放在窗口上
radio3 = tkinter.Radiobutton(root,text=string,justify=tkinter.CENTER) #居中
radio3.pack() #把单选框放在窗口上
root.mainloop()

在这里插入图片描述

​变​量​

一​组​单​选​框​中​,​到​底​选​中​的​是​哪​一​个​?​这​时​,​我​们​就​需​要​将​一​组​单​选​框​的​状​态​绑​定​到​同​一​个​变​量​。​听​起​来​可​能​会​有​些​抽​象​,​那​么​就​一​起​看​看​下​面​的​例​子​,​以​方​便​理​解​。​如​:​

import tkinter
root = tkinter.Tk()
intvar = tkinter.IntVar() #创建一个整数变量容器
radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #选中1时,intvar内的值被设置为1
radio1.pack() #放置单选框
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #选中2时,intvar内的值被设置为2
radio2.pack() #放置单选框
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #选中3时,intvar内的值被设置为3
radio3.pack() #放置单选框
root.mainloop()

在​以​上​例​子​中​,​我​们​创​建​了​一​个​用​于​存​储​整​数​的​变​量​,​然​后​将​变​量​与​3​个​单​选​框​的​状​态​绑​定​在​一​起​—​—​简​单​来​说​,​单​选​框​被​选​中​后​,​intvar中​的​值​就​会​被​设​置​为​对​应​单​选​框​的​value。​例​如​,​我​选​中​了​名​为​“​C​h​o​i​c​e​ ​1​”​的​单​选​框​,​那​么​ 1 1 1将​会​被​存​入​intvar。​接​着​我​又​反​悔​了​,​改​选​“​C​h​o​i​c​e​ ​3​”​,​那​么​ 3 3 3将​会​被​存​入​intvar,​替​换​掉​原​来​的​内​容​。​
注​意​调​用​tkinter.IntVar()等​t​k​i​n​t​e​r​变​量​容​器​,​必​须​要​先​创​建​根​窗​口​,​否​则​会​抛​出​异​常​。​

​命​令​

在​点​击​单​选​框​后​,​可​以​执​行​一​段​代​码​。​举​个​栗​子​:​

import tkinter
def cmd():
    print("Hello World!!!")

root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="Hello World!",command=cmd) #点击之后运行先前定义的cmd函数
radio.pack() #把单选框放在窗口上
root.mainloop()

以​上​代​码​就​是​,​按​下​单​选​框​后​输​出​"​H​e​l​l​o​ ​W​o​r​l​d​!​!​!​"​。​

​修​改​属​性​

import tkinter
root = tkinter.Tk()
radio = tkinter.Radiobutton(root,text="Hello World") #单选框
radio.pack() #把单选框贴在窗口上
radio.configure(font=("Consolas",50)) #将字体设置为Consolas,字体大小50,默认样式
#configure 和 config 都可以,
#radio.config(font=("Consolas",50)) 效果一样
root.mainloop()

​方​法​

和​单​选​框​不​同​,​在​这​里​我​只​介​绍​一​个​方​法​(​即​如​何​勾​选​特​定​的​选​项​)​,​因​为​其​它​方​法​都​比​较​反​逻​辑​,​而​且​容​易​导​致​出​错​。​

​勾​选​

调​用​radio.select()即​可​勾​选​单​选​框​。​

import tkinter
root = tkinter.Tk()
intvar = tkinter.IntVar()
radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #单选框1
radio1.pack() #放置单选框
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #单选框2
radio2.pack() #放置单选框
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #单选框3
radio3.pack() #放置单选框
radio2.select() #勾选单选框2
root.mainloop()

​拓​展​

​勾​选​

勾​选​某​个​单​选​框​的​方​式​其​实​不​止​一​种​。​由​于​在​编​程​中​,​一​般​都​会​为​不​同​的​单​选​选​项​设​置​不​同​的​值​,​因​此​还​可​以​通​过​改​变​变​量​的​方​式​来​设​置​勾​选​状​态​。​如​:​

import tkinter
root = tkinter.Tk()
intvar = tkinter.IntVar()
radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #单选框1
radio1.pack() #放置单选框
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #单选框2
radio2.pack() #放置单选框
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #单选框3
radio3.pack() #放置单选框
intvar.set(2) #设置intvar中的值为2,反映到复选框上就是将第二个选中
root.mainloop()

在​上​述​例​子​中​,​同​样​可​以​选​中​值​为​2​的​单​选​框​。​

​总​结​

上​面​便​是​单​选​框​的​主​要​内​容​啦​。​一​起​来​复​习​一​下​:​

属​性​ 意​义​
f​g​或​f​o​r​e​g​r​o​u​n​d​ 字​体​颜​色​
b​g​或​b​a​c​k​g​r​o​u​n​d​ 背​景​颜​色​
f​o​n​t​ 字​体​,​可​以​传​入​一​个​元​组​,​也​可​以​传​入​一​个​字​符​串​
c​u​r​s​o​r​ 光​标​放​置​在​单​选​框​上​时​的​样​式​
s​t​a​t​e​ 单​选​框​状​态​,​如​禁​用​(​D​i​s​a​b​l​e​d​)​,​正​常​(​N​o​r​m​a​l​)​
r​e​l​i​e​f​ 边​框​样​式​
j​u​s​t​i​f​y​ 对​齐​方​式​
b​d​或​b​o​r​d​e​r​w​i​d​t​h​ 边​框​粗​细​
t​a​k​e​f​o​c​u​s​ 是​否​可​以​获​取​焦​点​
v​a​r​i​a​b​l​e​ 转​存​状​态​变​量​
o​n​v​a​l​u​e​ 被​选​中​时​的​返​回​值​
o​f​f​v​a​l​u​e​ 未​勾​选​时​的​返​回​值​
c​o​m​m​a​n​d​ 按​下​单​选​框​后​调​用​命​令​
root = tkinter.Tk()

radio = tkinter.Radiobutton(root) #创建一个单选框

radio = tkinter.Radiobutton(root,text="Hello World",fg="green",bg="red") #创建一个单选框,红底绿字

radio = tkinter.Radiobutton(root,text="你好呀同学",font=("宋体",25,"italic")) #创建一个单选框,字体为宋体,字号25,斜体

radio = tkinter.Radiobutton(root,text="文本选择器",cursor="xterm") #光标放在单选框上后样式为文字选择器

radio1 = tkinter.Radiobutton(root,text="Disabled",state=tkinter.DISABLED) #禁用,无法选中或取消选中
radio2 = tkinter.Radiobutton(root,text="Normal",state=tkinter.NORMAL) #可以进行操作

radio = tkinter.Radiobutton(root,text="Ridge",relief="ridge") #各种边框的复选框

radio = tkinter.Radiobutton(root,text="Hello",bd=20,relief="groove") #厚厚的一层边框

radio1 = tkinter.Radiobutton(root,text="Hello 1") #默认可以获取焦点
radio2 = tkinter.Radiobutton(root,text="Hello 2",takefocus=True) #可以获取焦点
radio3 = tkinter.Radiobutton(root,text="Hello 3",takefocus=False) #无法获取焦点

string = """虞美人·春花秋月何时了
【五代十国】李煜
春花秋月何时了?往事知多少。小楼昨夜又东风,故国不堪回首月明中。
雕栏玉砌应犹在,只是朱颜改。问君能有几多愁?恰似一江春水向东流。
"""
radio1 = tkinter.Radiobutton(root,text=string,justify=tkinter.LEFT) #靠左
radio2 = tkinter.Radiobutton(root,text=string,justify=tkinter.RIGHT) #靠右
radio3 = tkinter.Radiobutton(root,text=string,justify=tkinter.CENTER) #居中

intvar = tkinter.IntVar() #创建一个整数变量容器
radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #选中1时,intvar内的值被设置为1
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #选中2时,intvar内的值被设置为2
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #选中3时,intvar内的值被设置为3

def cmd():
    print("Hello World!!!")
radio = tkinter.Radiobutton(root,text="Hello World!",command=cmd) #点击之后运行先前定义的cmd函数

radio.configure(font=("Consolas",50))

radio.pack() #把复选框放在窗口上

radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #单选框1
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #单选框2
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #单选框3
radio2.select() #勾选单选框2

intvar = tkinter.IntVar()
radio1 = tkinter.Radiobutton(root,text="Choice 1",variable=intvar,value=1) #单选框1
radio2 = tkinter.Radiobutton(root,text="Choice 2",variable=intvar,value=2) #单选框2
radio3 = tkinter.Radiobutton(root,text="Choice 3",variable=intvar,value=3) #单选框3
intvar.set(2) #设置intvar中的值为2,反映到复选框上就是将第二个选中

感​谢​您​的​阅​读​!​我​们​下​期​再​见​~​

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐