Python tkinter - 第五章 按钮控件(Button)属性

52 篇文章 129 订阅

第5章 按钮控件(Button)
5.1 按钮控件介绍
按钮是一个标准的tkinter控件。按钮上可以显示文字或者图片作为提示信息。文字只能使用一种字体以及颜色。按钮的最主要作用是被点击后,可以调用指定的回调函数,完成特定的功能。比如,关闭窗口、执行命令等。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Button(root,text="Quit",command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
这个小程序展示了按钮控件的基本功能。点击按钮后,回调设定好的函数。本程序的功能是退出应用,并关闭窗口。
5.2 按钮的属性
按钮控件的属性如下:

属性描述
activebackground按钮按下时背景颜色。默认是系统指定的颜色。
activeforeground按钮按下时前景颜色。默认是系统指定的颜色。
anchor采用何种方式锚定文字或者图片。默认是CENTER(居中模式)。可以选择如下方式:
N, NE, E, SE, S, SW, W, NW, or CENTER.
background
bg
按钮的背景颜色。默认是系统指定颜色
bitmapbitmap形式显示按键。如果设置了images属性,则忽略bitmap属性。
borderwidth
bd
按钮的边缘宽度。一般是1~2个像素值。
command设置回调函数。当按钮被按下时,会调用该函数。如果该属性没有设置,按下按钮时,不会有任何动作发生。
compound在按钮上同时显示文字和图片。默认的模式是如果提供了图片,会只显示图片。但是,如果将选项设为:
CENTER:在图片中间叠加显示文字
BOTTOM:在图片下方显示文字
LEFT:在图片左边显示文字
RIGHT:在图片右边显示文字
TOP:在图片顶部显示文字
NONE:不显示文字
cursor当鼠标移动经过按钮的时候,显示光标
default取值有normal,active和disabled三个。
disabledforeground按钮被禁止使用时,按时上的文字的颜色
font按钮上文字的字体。只能选择一种字体显示。
foreground
fg
按钮上文字或者位图的颜色
height设置按钮的高度。如果是显示文字,数值是文字单位。如果是显示图片,数值单位为像素。如果没有设置,系统自动计算按钮的高度。
highlightbackground当按钮失去焦点的时候,显示按钮边框的高亮颜色
highlightcolor当按钮获得焦点的时候,显示按钮边框的高亮颜色
highlightthickness设置高亮边框的宽度
image设置按钮显示的图片。如果该选项被设置,会取代text或bitmap选项。
justify当按钮有多行文字时,设置文字的对齐方式。可设的数值有:
LEFT,RIGHT,CENTER
overrelief当鼠标移动经过的时候,按钮显示浮雕效果。如果没有设定,会使用relief中的值。
padx在水平方向上,按钮边框和文字或图像之间的填充(pad)
pady在垂直方向上,按钮边框和文字或图像之间的填充(pad)
relief按钮3D美化效果。通常情况下,按钮被按下时,是SUNKEN效果,释放时是RAISED效果。其他的可选项包括:GROOVE,RIDGE以及FLAT
state按钮的状态,包括:NORMAL, ACTIVE 或者 DISABLED
takefocus标识用户是否能够使用Tab键选中按钮。取值是True,False或者None
text显示在按钮上的文字。如果使用了bitmap或者image,该选项被忽略
textvariable将tkinter变量与按钮相关联。如果变量的内容发生变化,按钮的文字也随之更新。
underline标识在那个字符下显示下划线。默认值是-1,标识没有字符下面显示下划线
width设置按钮的宽度。参考height属性
wraplength确定按钮上文字超过多长时,文字会被折叠成多行。单位是像素。默认值是0.

5.2.1 activebackground 和activeforeground

定义按钮在ACTIVE状态时,背景颜色和文字的颜色。这两个属性可以用来突出显示文本,或者某些特殊效果。
代码
import tkinter as tk
root=tk.Tk()
root.geometry(‘300x240’)
b1 = tk.Button(root,text=“Quit”,activebackground=‘blue’,
activeforeground=‘yellow’,command=root.destroy)
b1.pack()
root.mainloop()
结果:
在这里插入图片描述
5.2.2 anchor
anchor的作用是如何控制文字的显示。参见3.3.4节。看下面anchor=tk.SW的例子。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')

b1=tk.Button(root,text='Quit',anchor=tk.SW,
             height=5,width=20,command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
按钮上的文字,不是通常的居中显示,而是显示在左下角了。这就是anchor的作用。
5.2.3 background(bg)
设置按钮的背景颜色。bg是缩写格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='Quit',height=3,width=20,
             bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
说明:背景的颜色被设置为黄色。
5.2.4 bitmap
在按钮上显示图片。这个bitmap不是windows系统中的常用的bitmap。不建议使用bitmap。如果是要使用图片,可以使用image属性来设置,支持gif、png等常见的格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,bitmap='@x.xbm',
             bg='yellow', command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.5 borderwidth(bd)
定义按钮的边框宽度。bd是缩写格式。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',height=3,width=20,
             bd=10,bg='yellow',command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.6 command
command是用来设定回调函数的,也就是说按下按钮后,调用特定的函数实现一定的功能。以前的例子只是简单的调用系统的destroy()函数,在真正的使用中,肯定是要调用比较复杂的函数的。
其中一个关键的问题就是参数传递了。在command中,是没有括号的,是不能显式的把参数传递给回调函数的。这么做的重要原因就是,在按钮实例化的时候,就把参数传递给回调函数是没有意义的。回调函数的参数应该在程序中动态的确认,而不是简单的在实例化的时候就确认了。
那么如何传递参数给回调函数呢?一个简单的方法就是使用全局变量。但是这个方法不是最好的。全局变量多了,对程序的可维护性是一种破坏,也会带来潜在的bug。
第二种方法是使用类。把回调函数以及相应的参数都定义在类里面,使用类的内部变量,可以减少对其他程序的影响。这种方法使用是最普遍的。

还有一种方法是使用匿名函数lambda的方法。lambda可以让开发人员定义简单的函数而不用起名字。比如:
a=lambda x,y,z:xyz
print(a(1,2,3))

得到的结果是123=6。在按钮的回调函数中,也可以定义类似的匿名回调函数,从而满足传递参数的功能。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')

b2=tk.Label(root,text='测试文本')
b2.pack()
b3 = tk.Entry(root,width=20)
b3.pack()

def change_b2(label,text):
    label['text']=text.get()
    
b1=tk.Button(root,text='改变标签文字',height=3,
             width=20,bg='yellow',
             command=lambda :change_b2(b2,b3))
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
可以看到,使用lambda可以直接把参数传递给回调函数。其实实现的机制是按钮是把lambda当成回调函数,不过实际调用的时候,替换为我们期望的处理函数。

5.2.7 compound
见第四章关于compound用法的说明。
5.2.8 cursor
鼠标经过按钮时,显示的光标。光标形状说明3.3.6节。
5.2.9 default
取值为ACTIVE,NORMAL和DISABLED。
5.2.10 disabledforeground
按钮被禁止使用时,按钮上的文本的颜色。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='禁止使用按钮',
             height=3,width=20,state=tk.DISABLED,
             disabledforeground='blue',
             command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.11 font
设置按钮上文本的字体,参见3.3.3节的说明。
5.2.12 foreground 和fg
设置按钮上的文本的颜色。这个是按钮的状态为正常的情况下的文本颜色。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='正常按钮',
             height=3,width=20,
             fg='yellow',
             command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.13 highlightbackground,highlightcolor和highlightthickness
分别对应按钮没有获得焦点时边框的颜色(highlightbackground)、按钮获得焦点时边框的颜色(highlightcolor)以及边框的宽度(highlightthickness)。不过对于按钮控件而言,这三个参数不起作用。
5.2.14 image
在按钮上显示图片。当使用image属性时,text与bitmap属性会被屏蔽。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
p = tk.PhotoImage(file="a.gif")
b1=tk.Button(root,height=80,width=100,
             image=p,command=root.destroy)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.15 justify
按钮上显示多行文本时的对齐方式。具体的说明见第四章。
5.2.16 overrelief
设置鼠标经过按钮时的3D效果。取值与relief一样。当鼠标指针位于按钮区域时,会根据设置显示对应的3D效果

import tkinter as tk

root=tk.Tk()
root.geometry('300x240')

b1=tk.Button(root,height=4,width=10,text='退出',
             bd=10,command=root.destroy,
             overrelief='sunken')
b1.pack()

root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
当鼠标移动到按钮的上方,会改变3D外观。
5.2.17 padx 和 pady
文字或者图像与按钮边框之间的内边距。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',
             padx=10,pady=10,command=root.destroy)
b1.pack()
b2=tk.Button(root,text='退出',
             command=root.destroy)
b2.pack()
root.mainloop()

结果:
在这里插入图片描述
第一个按钮就是设置了padx和pady的效果。而第二个按钮没有设置padx和pady。可以发现第一个按钮的文字距离边框比第二个要远一些。这就是padx和pady的作用。
5.2.18 relief
按钮的3D效果。在一般的情况下,按钮按下时是sunken效果,释放时时raised效果。可以通过设置此属性改变按钮释放时的效果,但是并不影响按下时的效果。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=10,
             command=root.destroy,relief='solid')
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.19 state
设置按钮的状态。状态有三种:NORMAL,ACTIVE和DISABLED。NORMAL和ACTIVE的作用是一样的,按钮都可以正常使用。而DISABLED会禁止按钮的使用,按钮会灰化,并且无法按下。具体的用法见5.2.10中的例子。

5.2.20 takefocus
设定是否可以使用Tab来选中按钮。True为可以使用Tab键选中,False为不能。下面的代码就是可以选中的例子。被Tab选中的按钮,会有一个虚框出现在按钮上。此时按动空格键,就可以激活该按钮的功能。如果没有这个虚框,就只能用鼠标点击来激活按钮的功能了。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Button(root,text='退出',bd=5,
             command=root.destroy,takefocus=True)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.21 text
用来设定按钮上的文字。前面很多章节都有使用的例子了,这里不再赘述了。
5.2.22 textvariable
用来改变按钮上的文字。

import tkinter as tk

root=tk.Tk()
root.geometry('300x240')
btn_text=tk.StringVar()
def btn_change():
    btn_text.set('改变文字')
btn_text.set('退出')
b1=tk.Button(root,bd=5, command=btn_change,
             textvariable=btn_text)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
5.2.23 underline
标识在那个字母下面有下划线。对中文也有效。

import tkinter as tk
root=tk.Tk()
root.geometry('300x240')

b1=tk.Button(root,bd=5, command=root.destroy,
             text='退出',underline=1)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
5.2.24 width和height
设定按钮的宽度。对于文字是按照文字的宽度,而对于图像则是以像素为单位。具体的用法见前面的章节的例子。

5.2.25 wraplength
和第四章中的wraplength一样的用法,可参照。

  • 45
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值