Tkinter Button按钮控件

Button 控件是 Tkinter 中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数,是 Button 控件的主要功用。

首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用户按下这个按钮时,Tkinter 就会自动调用相关函数。

按钮控件使用起来非常简单,它同样可以包含文本、图像、位图,并通过command参数回调函数。当然按钮也并非一定要执行回调函数(callback function),它也只可以当一个“摆设”,不过这样的按钮是没有“灵魂的”

1
2
3
4
5
6
7
8
import tkinter as tk
# from setuptools import Command
root = tk.Tk()
root.geometry("300x300")
btn = tk.Button(root, text ="xiaoyang", command=quit)
btn.pack()
root.mainloop()

Button 控件的常营属性如下所示:

anchor
控制文本所在的位置,默认为中心位置(CENTER)

activebackground
当鼠标放在按钮上时候,按钮的背景颜色

activeforeground当鼠标放在按钮上时候,按钮的前景色

bd
按钮边框的大小,默认为 2 个像素

bg
按钮的背景色

command
用来执行按钮关联的回调函数。当按钮被点击时,执行该函数

fg
按钮的前景色

font按钮文本的字体样样式

height
按钮的高度

highlightcolor
按钮控件高亮处要显示的颜色

image
按钮上要显示的图片

justify
按钮显示多行文本时,用来指定文本的对齐方式,参数值有 LEFT/RIGHT/CENTER

padx/pady
padx 指定 x 轴(水平方向)的间距大小,pady 则表示 y轴(垂直方向)的间距大小

ipadx/ipady
ipadx 指标签文字与标签容器之间的横向距离;

ipady 则表示标签文字与标签容器之间的纵向距离

state设置按钮的可用状态,可选参数有NORMAL/ACTIVE/DISABLED,默认为 NORMAL

text
按钮控件要显示的文本

1
2
3
4
5
6
7
8
9
10
11
import tkinter as tk
from tkinter import messagebox
# from setuptools import Command
root = tk.Tk()
root.geometry("300x300")
def tishi():
# 使用消息对话框控件,showinfo()表示温馨提示
messagebox.showinfo(title='温馨提示', message='hello')
btn = tk.Button(root, text ="xiaoyang", command=tishi)
btn.pack()
root.mainloop()

下面为 Button 控件添加一张背景图片,实现代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
import tkinter as tk
from tkinter import Image, messagebox
# from setuptools import Command
root = tk.Tk()
root.geometry("300x300")
photo = tk.PhotoImage(file="D:\\File\\All\\web\\python\\blog\\99.png")
def tishi():
# 使用消息对话框控件,showinfo()表示温馨提示
messagebox.showinfo(title='温馨提示', message='hello')
btn = tk.Button(root, text ="xiaoyang", command=tishi,image= photo,width=20,height=20)
btn.pack()
root.mainloop()
扩展

按钮的布局按钮在主窗口中的布局,通常使用 grid() 函数来完成,该函数以网格状的形式(即行和列)来管理窗口的布局。grid() 布局管理器提供了一个sticky参数,通过该参数可以设置按钮的方位,该参数默认将控件设置居中,其他参数值有 N/S/W/E(上/下/左/右),而且可以组合在一起使用,比如 NW/WE/SE/SW/NE 等,这与anchor参数控制文本的显示位置,有着异曲同工之妙。如下图所示:

注意:
值得大家注意的是 grid() 布局方法不能与 pack() 混合在一起使用

使用了grid布局就不用再使用pack了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import tkinter as tk
from tkinter import messagebox
win = tk.Tk()
win.geometry('400x200+100+100')
win.resizable(0,0)
# 将俩个标签分别布置在第一行、第二行
tk.Label(win, text="账号:").grid(row=0)
tk.Label(win, text="密码:").grid(row=1)
# 创建输入框控件
e1 = tk.Entry(win)
# 以 * 的形式显示密码
e2 = tk.Entry(win,show='*')
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
# 编写一个简单的回调函数
def login():
messagebox.showinfo('hello')
# 使用 grid()的函数来布局,并控制按钮的显示位置
tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, sticky="w", padx=10, pady=5)
tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)
win.mainloop()