在Tkinter中,标签是用来显示信息的,而按钮则是用来与用户互动的。按钮是用户向你的程序提供输入的一种很好的方式,尤其是在互联网时代,一切都只需点击一下就可以了。当用户点击一个按钮时,他们希望有事情发生。作为程序员,我们的工作是对这种行为进行编码。程序员决定当按钮被点击时会发生什么。这可以通过使用一个回调函数来设置。回调函数具有当按钮被点击时要执行的行为,当创建一个新的按钮时,它可以作为参数传递给Button构造函数。当然,我们也可以定义按钮的外观和感觉。我们将在本教程中看看如何在Tkinter中使用按钮。
连接一个按钮
这段代码将创建一个按钮,并把它放在应用程序窗口的中心。很简单。
from tkinter import *
from tkinter import ttk
root = Tk()
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
root.mainloop()
定义一个回调函数
现有的按钮在被点击时不会做任何事情。我们可以通过在程序中添加一个回调函数来改变这种情况。这是一个两步的过程。
- 定义回调
- 将回调传递给按钮
现在这段代码只是在按钮被点击时向控制台打印出一条信息,我们可以看到。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!', command=callback)
button.pack(padx=100, pady=50)
root.mainloop()
可选的回调配置:你可以不把回调作为命令传给Button构造函数,而是使用.config()方法,像这样。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
button.config(command=callback)
root.mainloop()
button.invoke()
可以使用.invoke()方法来调用按钮,就像有人点击了它一样。在这个片段中,我们可以让程序虚拟点击5次。如果你需要从代码中的多个地方执行一个回调方法,这可能很有用,因为你只需要配置一次,那就是你在定义这个按钮的时候。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
button.config(command=callback)
for i in range(5):
button.invoke()
root.mainloop()
The Button Was Clicked!
The Button Was Clicked!
The Button Was Clicked!
The Button Was Clicked!
The Button Was Clicked!
给按钮添加图片
在应用程序中,使按钮更吸引人的一个方法是使用图像。就像Label一样,你首先需要使用PhotoImage构造函数来创建它。这个构造函数的参数是python_logo.gif的路径。在创建了logo对象后,我们可以使用按钮上的config方法来设置图像属性为该logo。在这个例子中,按钮在文本的左边。PhotoImage对象的另一个方法是subsample,我们可以用它来调整tkinter中的图像大小。你传入一个X和Y,它将在每个方向上使用第X个和第Y个像素。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
button.config(command=callback)
for i in range(5):
button.invoke()
logo = PhotoImage(file='python_logo.gif')
button.config(image=logo, compound=LEFT)
small_logo = logo.subsample(5, 5)
button.config(image=small_logo)
root.mainloop()

禁用一个按钮
按钮有一个状态,它决定了它们是被激活并可以使用,还是被禁用并不能使用。要设置一个部件的状态,使用state方法来修改disabled标志。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
button.config(command=callback)
for i in range(5):
button.invoke()
logo = PhotoImage(file='python_logo.gif')
button.config(image=logo, compound=LEFT)
small_logo = logo.subsample(5, 5)
button.config(image=small_logo)
button.state(['disabled'])
root.mainloop()

instate()方法
要检查一个按钮的当前状态,你可以使用instate()方法。
from tkinter import *
from tkinter import ttk
root = Tk()
def callback():
print('The Button Was Clicked!')
button = ttk.Button(root, text='Click Here!')
button.pack(padx=100, pady=50)
button.config(command=callback)
logo = PhotoImage(file='python_logo.gif')
button.config(image=logo, compound=LEFT)
small_logo = logo.subsample(5, 5)
button.config(image=small_logo)
button.state(['disabled'])
button_state = button.instate(['disabled'])
print(button_state)
button_state = button.instate(['!disabled'])
print(button_state)
True
False
Tkinter按钮总结
在本教程中,我们学习了一些关于如何使用[Tkinter]的按钮。它们提供了一种简单的方法来从应用程序的用户那里获得输入,以便在点击时通过回调函数来采取某种行动。