The Tkinter Button Widget
Button(按钮)组件用于实现各种各样的按钮。Button 组件可以包含文本或图像,你可以将一个 Python 的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。
Button 组件仅能显示单一字体的文本,但文本可以跨越多行。另外,还可以为其中的个别字符加上下划线(例如用于表示键盘快捷键)。默认情况下,tab 按键被用于在按钮间切换。
何时使用 Button 组件?
简而言之,Button 组件是用于让用户说:“干!”,通过按钮上的文字或图标让用户清楚按下去是干什么用的。Button 组件常常被用于工具栏、应用程序窗口、和表示接受或拒绝的对话框。
Checkbutton 和 Radiobutton 组件更适合做数据输入按钮使用。
用法
普通的按钮是非常简单易用的。你所需要做的就是指定 Button 的内容(文本、位图或者图片),并且关联当按钮被按下时应该调用的函数或方法:
1. from tkinter import *
2.
3. master = Tk()
4.
5. def callback():
6. print("我被调用了!")
7.
8. b = Button(master, text="干", command=callback)
9. b.pack()
10.
11. mainloop()
如果一个按钮没有相关联的函数或方法,那么它就形同虚设。你可能在开发程序的过程中会使用到这样的按钮,在这种情况下,更好的方法是禁用这些按钮,从而避免导致你的测试用户产生疑惑。
1. b = Button(master,text="Help", state=DISABLED)
如果你没有指定 Label 的大小,那么 Label 的尺寸是正好可以容纳其内容而已。你可以使用padx 和 pady 选项在 Button 的内容和边框间添加额外的间距。
当然你可以通过height 和 width 选项来明确设置 Button 的大小:如果你显示的是文本,那么这两个选项是以文本单元为单位定义 Button 的大小;如果你显示的是位图或者图像,那么它们以像素为单位(或者其他屏幕单元)定义 Button 大小。
对于内容为文本的Button 组件,你可以使用像素为单位指定 Buttton 的尺寸,不过这需要一些技巧。这里提供一个方法给大家参考(还有其它方法实现):
1. f = Frame(master, height=64, width=64)
2. f.pack_propagate(0)
3. f.pack()
4.
5. b = Button(f, text="确定",command=callback)
6. b.pack(fill=BOTH, expand=1)
Button 可以显示多行文本,你可以直接使用换行符或使用 wraplength 选项来实现。当文本换行的时候,你可以使用 anchor 和 justify 以及 padx 选项来使得文本如你所希望的显示出来:
1. b = Button(master, text=longtext,anchor=W, justify=LEFT, padx=2)
为了使一个普通的按钮保持被“按下”的状态,例如你希望通过某种方式实现一个工具箱(像 Photoshop 左侧的工具栏按钮,按下的时候他保持凹下去,说明你正在使用此工具),你可以简单的将 relief 选项的默认值 RAISED 改为 SUNKEN:
1. b.config(relief=SUNKEN)
你或许也希望修改背景色。不过更好的方法是使用 Checkbutton 或 Radiobutton 组件,并把它们的 indicatoron 选项设置为 False:
1. b = Checkbutton(master, image=bold,variable=var, indicatoron=0)
在早期版本的 Tkinter 中,image 选项会覆盖 text 选项。也就是说如果你同时指定了两个选项,那么只有 image 选项会被显示。但在新的 Tkinter 中,你可以使用 compound 选项设置二者的混合模式。例如下边就是通过设置 compound=CENTER 使得文字位于图片的上方(重叠显示):
1. b = Button(master, text="点我", image=photo,compound=CENTER)
通过 LEFT,RIGHT,TOP 和 BOTTOM 则可以设置文字在图像的旁边显示:
1. b = Button(master, text="点它 -> ",image=photo, compound=RIGHT)
参数
Button(master=None, **options) (class)
master -- 父组件
**options -- 组件选项,下方表格详细列举了各个选项的具体含义和用法:
选项 | 含义 |
activebackground | 1. 设置当 Button 处于活动状态(通过 state 选项设置状态)的背景色 |
activeforeground | 1. 设置当 Button 处于活动状态(通过 state 选项设置状态)的前景色 |
anchor | 1. 控制文本(或图像)在 Button 中显示的位置 |
background | 1. 设置背景颜色 |
bg | 跟 background 一样 |
bitmap | 1. 指定显示到 Button 上的位图 |
borderwidth | 1. 指定 Button 的边框宽度 |
bd | 跟 borderwidth 一样 |
compound | 1. 控制 Button 中文本和图像的混合模式 |
cursor | 1. 指定当鼠标在 Button 上飘过的时候的鼠标样式 |
default | 1. 如果设置该选项(NORMAL),该按钮会被绘制成默认按钮 |
disabledforeground | 1. 指定当 Button 不可用的时候前景色的颜色 |
font | 1. 指定 Button 中文本的字体 |
foreground | 1. 设置 Button 的文本和位图的颜色 |
fg | 跟 foreground 一样 |
height | 1. 设置 Button 的高度 |
highlightbackground | 1. 指定当 Button 没有获得焦点的时候高亮边框的颜色 |
highlightcolor | 1. 指定当 Button 获得焦点的时候高亮边框的颜色 |
highlightthickness | 1. 指定高亮边框的宽度 |
image | 1. 指定 Button 显示的图片 |
justify | 1. 定义如何对齐多行文本 |
overrelief | 1. 定义当鼠标飘过时 Button 的样式 |
padx | 指定 Button 水平方向上的额外间距(内容和边框间) |
pady | 指定 Button 垂直方向上的额外间距(内容和边框间) |
relief | 1. 指定边框样式 |
repeatdelay | 见下方 repeatinterval 选项的描述 |
repeatinterval | 1. 通常当用户鼠标按下按钮并释放的时候系统认为是一次点击动作。如果你希望当用户持续按下按钮的时候(没有松开),根据一定的间隔多次触发按钮,那么你可以设置这个选项。 |
state | 1. 指定 Button 的状态 |
takefocus | 1. 指定使用 Tab 键可以将焦点移到该 Button 组件上(这样按下空格键也相当于触发按钮事件) |
text | 1. 指定 Button 显示的文本 |
textvariable | 1. Button 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容 |
underline | 1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键) |
width | 1. 设置 Button 的宽度 |
wraplength | 1. 决定 Button 的文本应该被分成多少行 |
方法
flash()
-- 刷新 Button 组件,该方法将重绘 Button 组件若干次(在 ACTIVE 和 NORMAL 状态间切换)。
invoke()
-- 调用 Button 中 command 选项指定的函数或方法,并返回函数的返回值。
-- 如果 Button 的状态是 DISABLED(不可用)或没有指定 command 选项,则该方法无效。