news 2026/6/12 18:40:55

Python tkinter(3)按钮控件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python tkinter(3)按钮控件

目录

  • ​引​入​
  • ​制​作​一​个​按​钮​
  • ​按​钮​的​属​性​
    • ​文​本​
    • ​颜​色​
    • ​字​体​
    • ​长​宽​
    • ​对​齐​
    • ​光​标​
    • ​状​态​
    • ​命​令​
    • ​边​框​
    • ​图​片​
  • ​修​改​属​性​
  • ​总​结​

​本​文​由​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​ ​其​实​功​能​真​不​少​,​用​它​来​制​作​一​个​漂​亮​的​窗​口​一​点​问​题​都​没​有​。​这​一​期​,​我​们​就​来​看​看​按​钮​控​件​。​

​制​作​一​个​按​钮​

首​先​,​我​们​需​要​一​个​按​钮​。​创​建​一​个​窗​口​,​然​后​把​按​钮​放​上​去​:​

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()

​颜​色​

按​钮​还​可​以​设​置​颜​色​。​你​可​以​用​英​语​单​词​来​表​示​,​也​可​以​用​H​E​X​格​式​的​颜​色​。​颜​色​一​共​有​两​个​,​一​个​是​字​体​颜​色​,​用​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()


哈​哈​这​配​色​真​阴​间​啊​!​

​字​体​

字​体​以​数​组​的​形​式​传​入​。​数​组​的​第​一​项​是​字​体​,​第​二​项​是​字​号​。​如​果​找​不​到​这​个​字​体​,​t​k​i​n​t​e​r​不​会​报​错​,​但​是​会​使​用​默​认​的​字​体​来​代​替​。​

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()


而​字​体​样​式​有​一​下​几​种​:​

关​键​词​样​式​
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​杠​掉​

​长​宽​

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​,​却​不​是​个​正​方​形​呢​?​这​是​因​为​t​k​i​n​t​e​r​ ​B​u​t​t​o​n​的​长​和​宽​并​不​是​按​照​像​素​或​者​固​定​长​度​来​计​算​的​(​应​该​是​其​字​体​的​长​宽​)​。​

​对​齐​

按​钮​上​的​文​字​如​果​有​许​多​行​,​那​么​可​以​设​置​居​中​、​靠​左​或​靠​右​。​

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()

默​认​鼠​标​样​式​是​a​r​r​o​w​(​箭​头​)​,​除​此​之​外​还​有​其​它​一​些​鼠​标​样​式​,​如​x​t​e​r​m​等​。​

​状​态​

一​般​的​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​)​,​这​里​就​略​过​啦​。​

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

而​当​我​使​用​P​h​o​t​o​I​m​a​g​e​加​载​图​片​时​,​就​没​有​问​题​,​所​以​,​不​建​议​大​家​这​么​写​,​最​好​还​是​提​前​加​载​图​片​,​而​不​是​全​丢​给​按​钮​去​做​。​
而​如​果​希​望​文​字​和​图​片​并​存​,​那​就​不​能​单​纯​button = tkinter.Button(root,text="Hello",image=picture)了​,​否​则​就​会​发​现​按​钮​只​有​图​片​没​有​文​字​。​这​时​候​就​需​要​另​外​一​个​属​性​:​compound,​它​控​制​图​片​和​文​字​的​位​置​。​

值​意​思​
C​E​N​T​E​R​图​片​中​间​叠​加​文​字​
B​O​T​T​O​M​文​字​下​方​显​示​图​片​
L​E​F​T​文​字​左​边​显​示​图​片​
R​I​G​H​T​文​字​右​边​显​示​图​片​
T​O​P​文​字​上​面​显​示​图​片​
N​O​N​E​木​有​文​字​
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()

​修​改​属​性​

设​置​好​按​钮​后​,​可​以​改​变​它​的​属​性​。​可​以​让​它​变​颜​色​,​改​字​体​。​用​b​u​t​t​o​n​的​c​o​n​f​i​g​u​r​e​函​数​即​可​。​

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()

​总​结​

上​面​就​是​按​钮​的​大​部​分​属​性​啦​。​一​起​来​复​习​一​下​:​

属​性​意​义​
t​e​x​t​按​钮​上​显​示​文​字​
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​按​钮​字​体​,​以​元​组​或​字​符​串​的​形​式​传​入​
j​u​s​t​i​f​y​文​字​居​中​(​C​e​n​t​e​r​)​,​靠​左​(​L​e​f​t​)​或​靠​右​(​R​i​g​h​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​)​
d​i​s​a​b​l​e​d​f​o​r​e​g​r​o​u​n​d​禁​用​时​的​字​体​颜​色​
c​o​m​m​a​n​d​命​令​,​就​是​按​下​按​钮​时​执​行​的​命​令​
r​e​l​i​e​f​边​框​样​式​
b​d​或​b​o​r​d​e​r​w​i​d​t​h​边​框​粗​细​
i​m​a​g​e​按​钮​上​显​示​的​图​片​,​最​好​提​前​P​h​o​t​o​I​m​a​g​e​加​载​,​否​则​可​能​出​错​
c​o​m​p​o​u​n​d​图​片​和​文​字​共​存​时​的​相​对​位​置​
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()

感​谢​您​的​阅​读​,​您​的​点​赞​是​我​的​最​大​动​力​!​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 18:36:54

计算机毕业设计之新能源汽车大数据智能分析平台的设计与实现

本研究旨在探讨新能源汽车大数据智能分析平台的设计与实现。随着城市化进程的加快和新能源的普及&#xff0c;如何有效管理和分析海量新能源汽车数据成为亟待解决的问题。本研究通过构建一个集数据采集、处理、分析和可视化于一体的平台&#xff0c;实现了对新能源汽车数据的全…

作者头像 李华
网站建设 2026/6/12 18:32:59

原神帧率解锁终极指南:如何免费突破60帧限制享受丝滑游戏体验

原神帧率解锁终极指南&#xff1a;如何免费突破60帧限制享受丝滑游戏体验 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否觉得《原神》的60帧限制让你的高端显卡无法发挥真正实力&…

作者头像 李华
网站建设 2026/6/12 18:32:22

交通信号灯控制系统 Verilog Vivado

名称&#xff1a;交通信号灯控制系统 Verilog Vivado软件&#xff1a;Vivado语言&#xff1a;Verilog功能介绍本设计为交通信号灯控制系统&#xff0c;使用 Verilog 在 Vivado 环境下实现。系统面向主干道与支干道交叉路口控制场景&#xff0c;能够输出主干道红灯、绿灯、黄灯、…

作者头像 李华
网站建设 2026/6/12 18:28:05

Python 小高考篇(5)自定义函数

目录​d​e​f​ ​定​义​函​数​​传​入​参​数​​返​回​值​​l​a​m​b​d​a​ ​定​义​函​数​​递​归​​自​测​​总​结​​结​尾​​本​文​由​J​z​w​a​l​l​i​s​e​r​原​创​&#xff0c;​发​布​在​C​S​D​N​平​台​上​&#xff…

作者头像 李华
网站建设 2026/6/12 18:28:00

Java毕设选题推荐:基于 SpringBoot 的旅游路线推荐与行程管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华