第78课 - Tkinter 常用控件(按钮、标签、输入框)
学习目标
完成本课学习后,你将能够:
- 理解并创建
Button(按钮)、Label(标签)和Entry(输入框)这三个最基础的 Tkinter 控件。 - 为按钮控件绑定事件处理函数(
command参数),实现用户交互。 - 掌握获取输入框内容(
.get())和动态修改标签文本(.config())的基本方法。 - 能够综合运用这三个控件,构建一个简单的交互式窗口程序。
核心概念
在 GUI 编程中,控件(Widget)就像是构建用户界面的"积木"。Tkinter 提供了丰富的控件,我们今天先来学习最常用的三个:
Button(按钮):这是用户与程序交互的主要方式之一。点击按钮通常会触发一个函数或一段代码的执行,也就是"事件处理"。Label(标签):用于在窗口上显示一段静态文本或图片。它主要用于信息的展示,本身不支持用户直接编辑。Entry(输入框):这是一个单行文本输入区域,允许用户在其中输入字符串信息,例如姓名、密码等。
我们可以把它们想象成一个简单的登录界面:Label 提示"请输入用户名",Entry 让你输入用户名,Button "登录"用来提交信息。
代码示例
让我们通过具体的代码来学习如何创建和使用这些控件。
示例1:创建基础的按钮和标签
import tkinter as tk
# 创建主窗口对象
root = tk.Tk()
root.title("按钮与标签示例")
root.geometry("300x200")
# 1. 创建一个标签控件
# text: 显示的文本内容
# font: 字体格式 (字体, 大小)
label_hello = tk.Label(root, text="你好,Tkinter!", font=("Arial", 14))
# 使用 pack 布局管理器将标签放入窗口
label_hello.pack(pady=20) # pady 添加垂直外边距
# 2. 创建一个按钮控件,并绑定一个事件函数
def on_button_click():
print("按钮被点击了!")
# 修改标签的文本
label_hello.config(text="欢迎来到GUI的世界!")
# command 参数指定点击按钮时要调用的函数
button_click = tk.Button(root, text="点击我", command=on_button_click)
button_click.pack()
# 启动事件循环
root.mainloop()
示例2:创建输入框并获取内容
import tkinter as tk
root = tk.Tk()
root.title("输入框示例")
root.geometry("400x150")
# 创建一个标签用于提示
label_prompt = tk.Label(root, text="请输入你的名字:")
label_prompt.pack(pady=5)
# 创建一个输入框控件
# width: 指定输入框宽度(字符数)
entry_name = tk.Entry(root, width=30)
entry_name.pack(pady=5)
# 创建一个标签用于显示结果
label_result = tk.Label(root, text="", font=("Arial", 12))
label_result.pack(pady=10)
# 创建一个函数,用于获取输入并显示结果
def show_greeting():
# 使用 .get() 方法获取输入框中的文本
user_name = entry_name.get()
if user_name:
greeting = f"你好,{user_name}!欢迎学习Python。"
else:
greeting = "请输入你的名字。"
# 使用 .config() 方法更新结果标签的文本
label_result.config(text=greeting)
# 创建按钮,绑定获取输入的函数
button_greet = tk.Button(root, text="打招呼", command=show_greeting)
button_greet.pack()
root.mainloop()
示例3:综合小应用 - 简易计算器(加法)
这个例子综合了我们学到的三个控件。
import tkinter as tk
root = tk.Tk()
root.title("简易加法计算器")
root.geometry("350x180")
# 第一行:输入第一个数
label_num1 = tk.Label(root, text="第一个数:")
label_num1.grid(row=0, column=0, padx=5, pady=5, sticky="e") # 使用grid布局
entry_num1 = tk.Entry(root, width=10)
entry_num1.grid(row=0, column=1, padx=5, pady=5)
# 第二行:输入第二个数
label_num2 = tk.Label(root, text="第二个数:")
label_num2.grid(row=1, column=0, padx=5, pady=5, sticky="e")
entry_num2 = tk.Entry(root, width=10)
entry_num2.grid(row=1, column=1, padx=5, pady=5)
# 第三行:结果显示
label_result_text = tk.Label(root, text="结果:")
label_result_text.grid(row=2, column=0, padx=5, pady=5, sticky="e")
label_result = tk.Label(root, text="", fg="blue", font=("Arial", 12, "bold"))
label_result.grid(row=2, column=1, padx=5, pady=5, sticky="w")
# 定义计算函数
def calculate_sum():
try:
# 获取并转换输入为浮点数
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
result = num1 + num2
# 显示结果,保留两位小数
label_result.config(text=f"{result:.2f}")
except ValueError:
# 处理非数字输入的情况
label_result.config(text="请输入有效数字!")
# 第四行:计算按钮
button_calculate = tk.Button(root, text="计算加法", command=calculate_sum, width=15)
button_calculate.grid(row=3, column=0, columnspan=2, pady=15) # columnspan合并两列
root.mainloop()
实践练习
-
基础练习:创建一个窗口,包含一个
Entry控件和一个Button按钮。当用户在输入框中输入文字并点击按钮后,在程序的控制台(终端)打印出输入框的内容。- 预期输出:在终端看到你在输入框中输入的文字。
-
进阶练习:在练习1的基础上增加一个
Label控件。实现点击按钮后,将输入框中的文字显示在这个Label上,而不是打印到控制台。- 预期输出:窗口中的标签实时更新为你输入的内容。
-
挑战练习:尝试修改"示例3"的计算器,让它支持减法、乘法、除法(注意处理除以零的错误)。你可以增加三个不同的按钮,或者使用
Radiobutton选择运算类型。
常见错误
- 忘记主事件循环:没有
root.mainloop(),窗口会闪现一下就立刻消失,或者控件无法响应事件。这是最常见的新手错误。 - 错误地传递
command参数:- 错误写法:
Button(root, text="OK", command=my_function())。这里command=my_function()会立即执行函数,并把函数的返回值赋给command,这通常不是我们想要的。 - 正确写法:
Button(root, text="OK", command=my_function)。注意没有括号,传递的是函数对象本身。
- 错误写法:
- 混淆
pack()和grid():在同一个容器(如root)中,混用pack()和grid()布局管理器会导致程序报错或布局混乱。一个容器内通常应使用一种主要布局。 - 获取空输入:没有检查输入框是否为空就直接使用
.get()的结果进行计算或字符串操作,可能导致错误(如类型转换失败或空字符串)。
小结
本节课,我们学习了 Tkinter GUI 编程的三个基石控件:
Label:用于展示信息。Button:通过command参数绑定函数,是触发动作的核心。Entry:用于接收用户输入的单行文本框。
核心交互流程通常是:用户在 Entry 中输入信息 -> 点击 Button -> 在事件函数中通过 .get() 获取输入 -> 处理信息 -> 通过 .config() 更新 Label 或其他控件的状态来反馈结果。
熟练掌握这三个控件的创建、属性设置和事件处理,是构建更复杂 GUI 应用程序的第一步。在下一课中,我们将深入学习如何精细地控制这些控件在窗口中的位置和大小,即布局管理。
练习编辑器
python
Loading...