目录
- 引入
- 制作一个按钮
- 按钮的属性
- 文本
- 颜色
- 字体
- 长宽
- 对齐
- 光标
- 状态
- 命令
- 边框
- 图片
- 修改属性
- 总结
本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser
引入
tkinter 其实功能真不少,用它来制作一个漂亮的窗口一点问题都没有。这一期,我们就来看看按钮控件。
制作一个按钮
首先,我们需要一个按钮。创建一个窗口,然后把按钮放上去:
importtkinter root=tkinter.Tk()button=tkinter.Button(root)#创建一个按钮button.pack()#把按钮放在窗口上root.mainloop()
只可惜短短的按钮上啥都没有啊。。。
按钮的属性
文本
就是显示在按钮上的文字。
importtkinter root=tkinter.Tk()button=tkinter.Button(root,text="Hello World")#创建一个按钮,上面写 Hello Worldbutton.pack()#把按钮放在窗口上root.mainloop()颜色
按钮还可以设置颜色。你可以用英语单词来表示,也可以用HEX格式的颜色。颜色一共有两个,一个是字体颜色,用fg或foreground作为属性的名称;还有一个是背景颜色,用bg或background作为属性名称。
importtkinter root=tkinter.Tk()button1=tkinter.Button(root,text="Hi!",fg="red",bg="blue")#红色字体,蓝色背景,用英语单词代替颜色button1.pack()#把按钮放在窗口上button2=tkinter.Button(root,text="Hi!",fg="#00ff00",bg="#0000ff")#绿色字体,蓝色背景,用HEX格式的颜色button2.pack()#其实这么写也可以:#button2 = tkinter.Button(root,text="Hi!",foreground="#00ff00",background="#0000ff")#但这样写有点麻烦,你觉得呢?root.mainloop()
哈哈这配色真阴间啊!
字体
字体以数组的形式传入。数组的第一项是字体,第二项是字号。如果找不到这个字体,tkinter不会报错,但是会使用默认的字体来代替。
importtkinter root=tkinter.Tk()button=tkinter.Button(root,text="Hi!",font=("Arial",50,"roman"))#字体为Arial,字号为50,正体字,也可以不指定样式,如font=("Arial",50)#若不需要设置字体大小和字体样式,也可以直接写为:#button = tkinter.Button(root,font="Arial")button.pack()#把按钮放在窗口上root.mainloop()
而字体样式有一下几种:
| 关键词 | 样式 |
|---|---|
| roman | 正体字 |
| italic | 斜体字 |
| bold | 粗体字 |
| underline | 下划线 |
| overstrike | 杠掉 |
长宽
importtkinter root=tkinter.Tk()button1=tkinter.Button(root,text="Hi!",width=5)#宽为5button1.pack()#把按钮放在窗口上button2=tkinter.Button(root,text="Hi!",height=5)#长为5button2.pack()#把按钮放在窗口上button3=tkinter.Button(root,text="Hi!",height=5,width=5)#长宽都为5button3.pack()#把按钮放在窗口上root.mainloop()
哎真有点丑啊。。。
但为什么我最后一个按钮明明设置的是长宽都为5,却不是个正方形呢?这是因为tkinter Button的长和宽并不是按照像素或者固定长度来计算的(应该是其字体的长宽)。
对齐
按钮上的文字如果有许多行,那么可以设置居中、靠左或靠右。
importtkinter root=tkinter.Tk()string="""水调歌头 【宋】 苏轼 丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。 """button1=tkinter.Button(root,text=string,justify=tkinter.LEFT)#靠左button1.pack()#把按钮放在窗口上button2=tkinter.Button(root,text=string,justify=tkinter.RIGHT)#靠右button2.pack()#把按钮放在窗口上button3=tkinter.Button(root,text=string,justify=tkinter.CENTER)#居中button3.pack()#把按钮放在窗口上root.mainloop()光标
光标有许多种样式。内容不少,这里就稍微介绍下吧,其余的内容我找时间再专门写一篇吧。
importtkinter root=tkinter.Tk()button=tkinter.Button(root,text="Hi!",cursor="watch")#光标放在按钮上后转圈button.pack()#把按钮粘到窗口上root.mainloop()默认鼠标样式是arrow(箭头),除此之外还有其它一些鼠标样式,如xterm等。
状态
一般的tkinter控件都有2个常用的状态:正常(Normal)、禁用(Disabled),还有一些不常用的,如只读(Readonly)、活动(Active),这里就略过啦。
importtkinter root=tkinter.Tk()button1=tkinter.Button(root,text="Normal",state=tkinter.NORMAL)#正常button1.pack()#把按钮放在窗口上button2=tkinter.Button(root,text="Disabled",state=tkinter.DISABLED)#禁用,无法点击按钮button2.pack()#把按钮放在窗口上root.mainloop()被禁用的按钮在默认情况下字体是灰色的,而且点不下去。但是,也可以设置禁用时的字体颜色disabledforeground,用法和属性fg类似(但似乎不能设置禁用时的背景色)。如:
button=tkinter.Button(root,text="Disabled",state=tkinter.DISABLED,disabledforeground="green")#禁用时的字体是绿油油的命令
按下按钮后,需要有什么功能呢?这可是按钮的灵魂啊。这时候,属性command就派上用场了。
importtkinterdefclick():print("Hello World!")root=tkinter.Tk()button=tkinter.Button(root,text="Click me!",command=click)#点击之后运行先前定义的click函数button.pack()#把按钮放在窗口上root.mainloop()边框
边框一共有这么几种:flat、groove、raised、ridge、solid、sunken;就一起来看看效果吧!
importtkinter root=tkinter.Tk()relief=["flat","groove","raised","ridge","solid","sunken"]#不同的样式foriinrelief:button=tkinter.Button(root,text=i,relief=i)#每个样式来一个按钮button.pack()#把每个样式的按钮放在窗口上root.mainloop()有了边框样式,我们还可以设置边框的厚度:bd或borderwidth。
importtkinter root=tkinter.Tk()button=tkinter.Button(root,text="Hi!",bd=20)#厚厚的一层边框button.pack()#把按钮放在窗口上root.mainloop()图片
如果一个按钮上只有文字,那未免太无聊了。我们还可以在按钮上放张图片:
importtkinter root=tkinter.Tk()photo=tkinter.PhotoImage(file="laugh.png")#加载一张图片button=tkinter.Button(root,image=photo)#设置图片button.pack()#把按钮贴在窗口上root.mainloop()其实,这么写应该也可以:button = tkinter.Button(root,image="laugh.png")
但是,总会出现一些莫名其妙的报错,如:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.8/tkinter/__init__.py", line 2650, in __init__ Widget.__init__(self, master, 'button', cnf, kw) File "/usr/lib/python3.8/tkinter/__init__.py", line 2572, in __init__ self.tk.call( _tkinter.TclError: image "laugh.png" doesn't exist而当我使用PhotoImage加载图片时,就没有问题,所以,不建议大家这么写,最好还是提前加载图片,而不是全丢给按钮去做。
而如果希望文字和图片并存,那就不能单纯button = tkinter.Button(root,text="Hello",image=picture)了,否则就会发现按钮只有图片没有文字。这时候就需要另外一个属性:compound,它控制图片和文字的位置。
| 值 | 意思 |
|---|---|
| CENTER | 图片中间叠加文字 |
| BOTTOM | 文字下方显示图片 |
| LEFT | 文字左边显示图片 |
| RIGHT | 文字右边显示图片 |
| TOP | 文字上面显示图片 |
| NONE | 木有文字 |
importtkinter root=tkinter.Tk()photo=tkinter.PhotoImage(file="laugh.png")#加载一张图片compound=[tkinter.CENTER,tkinter.BOTTOM,tkinter.LEFT,tkinter.RIGHT,tkinter.TOP,tkinter.NONE]foriinrange(len(compound)):button=tkinter.Button(root,image=photo,text=compound[i],compound=compound[i])#按钮button.grid(row=int(i/2),column=i%2)#把按钮贴在窗口上root.mainloop()修改属性
设置好按钮后,可以改变它的属性。可以让它变颜色,改字体。用button的configure函数即可。
importtkinter root=tkinter.Tk()button=tkinter.Button(root,image=photo,text="Hello!")#按钮button.pack()#把按钮贴在窗口上button.configure(text="Hi!",font=("Consolas",50))#将按钮上的文字改为"Hi!",再将字体设置为Consolas,字体大小50#configure 和 config 都可以,#button.config(text="Hi!",font=("Consolas",50)) 效果一样root.mainloop()总结
上面就是按钮的大部分属性啦。一起来复习一下:
| 属性 | 意义 |
|---|---|
| text | 按钮上显示文字 |
| fg或foreground | 字体颜色 |
| bg或background | 背景颜色 |
| font | 按钮字体,以元组或字符串的形式传入 |
| justify | 文字居中(Center),靠左(Left)或靠右(Right) |
| cursor | 光标放置在按钮上时的样式 |
| state | 按钮状态,如禁用(Disabled),正常(Normal) |
| disabledforeground | 禁用时的字体颜色 |
| command | 命令,就是按下按钮时执行的命令 |
| relief | 边框样式 |
| bd或borderwidth | 边框粗细 |
| image | 按钮上显示的图片,最好提前PhotoImage加载,否则可能出错 |
| compound | 图片和文字共存时的相对位置 |
importtkinter root=tkinter.Tk()button=tkinter.Button(root,text="Hello World")#创建一个按钮,上面写 Hello Worldbutton=tkinter.Button(root,text="Hi!",fg="red",bg="blue")#红色字体,蓝色背景,用英语单词代替颜色button=tkinter.Button(root,text="Hi!",fg="#00ff00",bg="#0000ff")#绿色字体,蓝色背景,用HEX格式的颜色button=tkinter.Button(root,text="Hi!",font=("Arial",50,"roman"))#字体为Arial,字号为50,正题字button=tkinter.Button(root,font="Arial")#字体Arial,默认字号,默认字体样式button=tkinter.Button(root,text="Hi!",width=5)#宽为5button=tkinter.Button(root,text="Hi!",height=5)#长为5button=tkinter.Button(root,text="Hi!",height=5,width=5)#长宽都为5string="""水调歌头 【宋】 苏轼 丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。 明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。 转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。 """button=tkinter.Button(root,text=string,justify=tkinter.LEFT)#靠左button=tkinter.Button(root,text=string,justify=tkinter.RIGHT)#靠右button=tkinter.Button(root,text=string,justify=tkinter.CENTER)#居中button=tkinter.Button(root,text="Hi!",cursor="watch")#光标放在按钮上后转圈button=tkinter.Button(root,text="Normal",state=tkinter.NORMAL)#正常button=tkinter.Button(root,text="Disabled",state=tkinter.DISABLED)#禁用,无法点击按钮button=tkinter.Button(root,text="Disabled",state=tkinter.DISABLED,disabledforeground="green")#禁用时的字体是绿油油的defclick():print("Hello World!")button=tkinter.Button(root,text="Click me!",command=click)#点击之后运行先前定义的click函数button=tkinter.Button(root,text="Groove",relief="groove")#不同边框样式的按钮button=tkinter.Button(root,text="Hi!",bd=20)#厚厚的一层边框photo=tkinter.PhotoImage(file="laugh.png")#加载一张图片button=tkinter.Button(root,image=photo)#设置图片button=tkinter.Button(root,image=photo,text="Center",compound=tkinter.CENTER)#图片位置button.configure(text="Hi!",font=("Consolas",50,"roman"))button.pack()#按钮放在窗口上root.mainloop()感谢您的阅读,您的点赞是我的最大动力!