Python tkinter(5)复选框控件

目录

  • 引入
  • 创建一个复选框
  • 复选框的属性
    • 颜色
    • 字体
    • 光标
    • 状态
    • 边框
    • 能否获取焦点
    • 对齐
    • 变量
    • 自定义返回值
    • 命令
    • 修改属性
  • 方法
    • 勾选
    • 取消勾选
    • 改变状态
  • 拓展
    • 勾选/取消勾选


引入

最近有想看更新的,感谢各位的关注!刚刚初中升高中就感受到了万般忙碌,不过无论如何还是要抽空更新的啦。由于时间比较宝贵,等到文章完成还需要一年半载(真是无语,高中不允许携带手机,否则会拿处分,而且我还住校,于是只有周日可以拿到手机,除此之外周末还有一大堆作业要写),所以我决定先发布文章,后续再慢慢完善~

废话不多说,这一次我们来看看tkinter的复选框控件。

复选框控件就是一个小勾子,一共有两种主要状态——选中和非选中。点击一下,就会切换选中状态。

创建一个复选框

老样子,先制作一个窗口,然后将复选框贴到窗口上。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root)
check.pack()
root.mainloop()

复选框的属性

颜色

复选框有各种各样的颜色。颜色包括字体颜色(fgforeground)和背景颜色(bgbackground)。颜色可以用英语单词(如"red""blue")来表示,也可以用HEX格式的颜色(如"#ff00ff""#abcd00")。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello World",fg="red",bg="blue")#创建一个复选框,蓝底红字
check.pack() #把输入框放到窗口上去
root.mainloop()

字体

你可以为复选框选择喜欢的字体。比如,我喜欢宋体字,希望字体大一点(25号),并且是斜体。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="你好呀同学",font=("宋体",25,"italic")) #创建一个复选框,字体为宋体,字号25,斜体
#若不需要定义字体大小和字体样式,也可以直接写为:
#check = tkinter.Checkbutton(root,font="宋体")
check.pack() #把输入框放到窗口上去
root.mainloop()
关键词 样式 样例
roman 正体字
italic 斜体字
bold 粗体字
underline 下划线
overstrike 杠掉

光标

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

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

状态

一般的tkinter控件都有2个常用的状态:正常(Normal)、禁用(Disabled),还有一些不常用的,如只读(Readonly)、活动(Active),这里只介绍Disabled和Normal吧,因为另外两个实在太不常见了。

import tkinter
root = tkinter.Tk()
check1 = tkinter.Checkbutton(root,text="Disabled",state=tkinter.DISABLED) #禁用,无法选中或取消选中
check1.pack()
check2 = tkinter.Checkbutton(root,text="Normal",state=tkinter.NORMAL) #可以进行操作
check2.pack()
root.mainloop()

边框

边框样式(relief)一共有这么几种:flatgrooveraisedridgesolidsunken,就一起来看看效果吧!

import tkinter
root = tkinter.Tk()
relief = ["flat","groove","raised","ridge","solid","sunken"] #不同的样式
for i in range(len(relief)):
    check = tkinter.Checkbutton(root,text=relief[i],relief=relief[i]) #各种边框的复选框
    check.pack() #把不同样式的复选框放在窗口上
root.mainloop()

有了边框样式,我们还可以设置边框的厚度:bdborderwidth

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello",bd=20,relief="groove") #厚厚的一层边框
check.pack() #把输入框放在窗口上
root.mainloop()

能否获取焦点

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

import tkinter
root = tkinter.Tk()
check1 = tkinter.Checkbutton(root,text="Hello 1")
check1.pack()
check2 = tkinter.Checkbutton(root,text="Hello 2",takefocus=True)
check2.pack()
check3 = tkinter.Checkbutton(root,text="Hello 3",takefocus=False)
check3.pack()
root.mainloop()

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

对齐

在Microsoft Office中,文字排版有三种主要的方式:靠左、居中、靠右。而在复选框中,若需要显示多行文字,也可以设置排班方式:justify

import tkinter
root = tkinter.Tk()
poem = """
静夜思
唐 李白
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
"""
check = tkinter.Checkbutton(root,text=poem,justify=tkinter.LEFT)
check.pack()
root.mainloop()

变量

复选框到底是否选中?这里,我们就需要将复选框当前状态存入一个变量中。如:

import tkinter
root = tkinter.Tk()
intvar = tkinter.IntVar()
check = tkinter.Checkbutton(root,text="Hello World!",variable=intvar)
check.pack()
print(intvar.get())
root.mainloop()

在以上例子中,我创建了一个用于存储整数的变量,然后将变量与复选框的状态绑定在一起——简单来说,如果复选框被选中,那么intvar.get()就会返回 1 1 1,反之则返回 0 0 0
注意调用tkinter.IntVar()等的tkinter变量容器,必须要先创建根窗口,否则会抛出异常。

自定义返回值

也可以自定义返回值:比如我想要复选框在选中的状态下返回"Yes",否则返回"No"。此时,就牵涉到onvalueoffvalue两个变量了。

import tkinter
root = tkinter.Tk()
strvar = tkinter.StringVar()
check = tkinter.Checkbutton(root,text="Hello World!",variable=strvar,onvalue="Yes",offvalue="No")
check.pack()
root.mainloop()

Tkinter有两种变量容器:tkinter.IntVartkinter.StringVar()。详细内容我可能会在后期做介绍。

命令

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

import tkinter
root = tkinter.Tk()
def cmd():
    print("Hello World!!!")
check = tkinter.Checkbutton(root,text="Hello World!",command=cmd)
check.pack()
root.mainloop()

以上代码就是,按下复选框后输出"Hello World!!!"。

修改属性

就是问一下高中的必读书,就只有《红楼梦》和《乡土中国

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello World") #复选框
check.pack() #把复选框贴在窗口上
check.configure(font=("Consolas",50)) #将字体设置为Consolas,字体大小50,默认样式
#configure 和 config 都可以,
#check.config(font=("Consolas",50)) 效果一样
root.mainloop()
属性 意义
fg或foreground 字体颜色
bg或background 背景颜色
font 字体,可以传入一个元组,也可以传入一个字符串
cursor 光标放置在输入框上时的样式
state 复选框状态,如禁用(Disabled),正常(Normal)
relief 边框样式
justify 对齐方式
bd或borderwidth 边框粗细
takefocus 是否可以获取焦点
variable 转存状态变量
onvalue 被选中时的返回值
offvalue 未勾选时的返回值
command 按下复选框后调用命令

方法

勾选

调用check.select()即可勾选中该复选框。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello World")
check.pack()
check.select()
root.mainloop()

取消勾选

和勾选相反,调用check.deselect()即可。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello World")
check.pack()
check.deselect()
root.mainloop()

改变状态

调用check.toggle()会改变当前复选框的状态。即,如果复选框当前状态是勾选状态,那么就会被取消勾选;如果当前没有勾选,就会勾选复选框。

import tkinter
root = tkinter.Tk()
check = tkinter.Checkbutton(root,text="Hello World")
check.pack()
check.toggle()
root.mainloop()

拓展

勾选/取消勾选

勾选和取消勾选的方式其实不止一种。对于设置了状态转存变量的复选框来说,还可以通过改变变量的方式来设置勾选状态。如:

import tkinter
root = tkinter.Tk()
intvar = tkinter.IntVar()
check = tkinter.Checkbutton(root,text="Hello World!",variable=intvar)
check.pack()
intvar.set(1)
root.mainloop()

同理,intvar.set(0)也可以取消勾选。

你可能感兴趣的:(Python,#,tkinter,python)