杰瑞科技汇

Python3.6的tkinter怎么用?

Python 3.6 是一个非常经典和稳定的版本,它自带的 Tkinter 库版本也足够用来开发绝大多数的桌面 GUI 应用程序,虽然现在有更新的 Python 版本和更现代的 GUI 框架(如 PyQt、Kivy),但 Tkinter 因其简单、轻量、无需额外安装的特点,仍然是入门 GUI 编程和开发小型工具的首选。

下面我将从几个方面为你详细介绍 Python 3.6 的 Tkinter。


Tkinter 是什么?

Tkinter 是 Python 的标准 GUI(图形用户界面)库,它是对 Tcl/Tk 工具包的 Python 接口,因为 Tkinter 是 Python 的标准库,所以只要你安装了 Python,就默认包含了 Tkinter,无需使用 pip 单独安装。

核心思想: Tkinter 采用面向对象的方式来创建 GUI,你通过创建各种“小部件”(Widget,如按钮、标签、输入框等)并将它们“打包”(Pack, Grid, Place)到一个主窗口中,来构建你的应用程序界面。


一个最简单的 Tkinter 程序(Python 3.6)

让我们从一个经典的 "Hello, World!" 程序开始,让你对 Tkinter 有一个直观的感受。

# 1. 导入 tkinter 模块
# 在 Python 3 中,推荐使用 tkinter 而不是 Tkinter
import tkinter as tk
# 2. 创建主窗口(根窗口)
# 所有的 GUI 元素都会被放置在这个窗口中
root = tk.Tk()
# 3. 设置窗口的标题"我的第一个 Tkinter 窗口")
# 4. 设置窗口的大小
# 宽度 x 高度,单位是像素
root.geometry("400x300")
# 5. 创建一个标签(Label)小部件
# text: 显示的文本
# pack(): 这是一种布局管理器,它会将标签放在窗口中
label = tk.Label(root, text="你好,Tkinter 世界!", font=("Arial", 14))
# 6. 将标签放置到主窗口中
label.pack(pady=20) # pady=20 表示在垂直方向上添加 20 像素的外边距
# 7. 创建一个按钮(Button)小部件
# command: 当按钮被点击时,要执行的函数
def on_button_click():
    print("按钮被点击了!")
    label.config(text="你点击了按钮!") # 修改标签的文本
button = tk.Button(root, text="点击我", command=on_button_click)
button.pack(pady=10)
# 8. 启动主事件循环
# 这行代码会显示窗口,并等待用户的交互(如点击、输入等)
# 程序会在这里阻塞,直到窗口被关闭
root.mainloop()

如何运行:

  1. 将以上代码保存为文件,my_app.py
  2. 在终端或命令提示符中运行 python my_app.py
  3. 你会看到一个窗口弹出,上面有文字和一个按钮,点击按钮,控制台会打印信息,窗口上的文字也会改变。

Tkinter 的核心概念

理解以下三个核心概念,你就能掌握 Tkinter 的基本用法。

a. 根窗口

root = tk.Tk() 创建的窗口就是根窗口,它是所有其他小部件的容器,一个 Tkinter 应用程序通常只有一个根窗口。

b. 小部件

小部件是构成 GUI 的基本元素,如按钮、标签、输入框、菜单等,Python 3.6 的 Tkinter 提供了丰富的小部件。

小部件 英文名 描述
Label 用于显示单行文本或图像。
Button 按钮 一个可点击的按钮,用于触发一个动作。
Entry 单行输入框 用于让用户输入单行文本。
Text 多行文本框 用于显示和编辑多行文本。
Frame 框架 一个容器小部件,用于将其他小部件分组,方便布局。
Listbox 列表框 显示一个字符串列表,用户可以选择一个或多个。
Canvas 画布 用于绘制图形、线条、形状等。
Menu 菜单 创建应用程序的菜单栏。

c. 布局管理器

布局管理器负责决定小部件在窗口中的位置和排列方式,Tkinter 主要提供三种布局管理器:

  1. pack()

    • 特点: 简单、快速,它会按照创建的顺序,将小部件从上到下或从左到右地“打包”进父容器。
    • 缺点: 灵活性差,难以创建复杂的布局。
    • 常用参数:
      • side: 可以是 tk.TOP (默认), tk.BOTTOM, tk.LEFT, tk.RIGHT
      • fill: 可以是 tk.X (水平填充), tk.Y (垂直填充), tk.BOTH (双向填充), None (默认)。
      • expand: TrueFalse,是否填充父容器中未被占用的空间。
      • padx/pady: 水平/垂直外边距。
      • ipadx/ipady: 水平/垂直内边距。
  2. grid()

    • 特点: 最常用、最强大的布局方式,它将父容器划分为一个网格,你可以通过行号和列号来精确控制每个小部件的位置。
    • 方法: grid(row=行号, column=列号)
    • 常用参数:
      • row, column: 指定小部件所在的行和列(从 0 开始计数)。
      • sticky: 用于控制小部件在网格单元内的对齐方式,可以使用 N, S, E, W (北、南、东、西) 以及它们的组合,如 tk.NE, tk.W+tk.E (水平拉伸)。
      • columnspan: 跨列合并,columnspan=2 表示小部件占据两列宽度。
      • rowspan: 跨行合并。
      • padx/pady, ipadx/ipady: 同 pack()
  3. place()

    • 特点: 精确控制,通过指定具体的 x, y 坐标来放置小部件。
    • 缺点: 窗口大小改变时,小部件不会自适应,通常不推荐用于主布局。
    • 方法: place(x=水平坐标, y=垂直坐标)

重要提示: 在同一个父容器中,不要混合使用 pack()grid(),这会导致不可预测的错误,选择一种并坚持使用它。


一个更完整的例子:登录界面

下面是一个使用 grid() 布局管理器的登录界面示例,它包含了 LabelEntryButton

import tkinter as tk
from tkinter import messagebox
def login():
    """处理登录逻辑"""
    username = entry_username.get()
    password = entry_password.get()
    if username == "admin" and password == "123456":
        messagebox.showinfo("成功", "登录成功!欢迎回来!")
    else:
        messagebox.showerror("错误", "用户名或密码错误!")
# --- 创建主窗口 ---
root = tk.Tk()"登录系统")
root.geometry("300x200")
# --- 使用 grid 布局 ---
# 用户名标签
label_username = tk.Label(root, text="用户名:")
label_username.grid(row=0, column=0, padx=10, pady=10, sticky="w")
# 用户名输入框
entry_username = tk.Entry(root)
entry_username.grid(row=0, column=1, padx=10, pady=10)
# 密码标签
label_password = tk.Label(root, text="密码:")
label_password.grid(row=1, column=0, padx=10, pady=10, sticky="w")
# 密码输入框
entry_password = tk.Entry(root, show="*") # show="*" 用于隐藏密码
entry_password.grid(row=1, column=1, padx=10, pady=10)
# 登录按钮
button_login = tk.Button(root, text="登录", command=login)
button_login.grid(row=2, column=0, columnspan=2, pady=20) # columnspan=2 使按钮跨越两列
# --- 启动主循环 ---
root.mainloop()

代码解析:

  1. 我们定义了一个 login 函数,用于获取输入框的内容并进行验证。
  2. messagebox 是 Tkinter 的一个标准对话框模块,用于显示提示信息。
  3. 所有小部件都使用 grid() 进行布局,通过 rowcolumn 精确定位。
  4. sticky="w" 使标签靠左对齐,使输入框和按钮水平拉伸 (tk.W+tk.E 是默认行为,所以可以省略)。
  5. button_login.grid(..., columnspan=2) 让登录按钮占据第 0 列和第 1 列,实现居中效果。

Python 3.6 Tkinter 的注意事项与局限性

  1. 外观陈旧: Tkinter 的默认外观在不同操作系统上可能显得有些过时,不如现代框架美观。
  2. 自定义性有限: 虽然可以修改颜色、字体等,但对控件外观的深度自定义比较困难。
  3. 事件处理模型: Tkinter 的事件处理是基于回调函数的,对于非常复杂的交互逻辑,可能会变得有些混乱。
  4. 文档: 官方文档有时不够详细,社区资源(如 Stack Overflow)是你的好朋友。

对于 Python 3.6 Tkinter 是一个完全可用且功能强大的 GUI 库

  • 优点: 简单易学、跨平台、无需安装、Python 标准库。
  • 适用场景: 快速开发小型桌面工具、数据可视化辅助工具、自动化脚本 GUI、作为学习 GUI 编程的入门框架。

如果你想用 Python 3.6 开发一个简单的桌面应用,Tkinter 绝对是一个值得信赖的选择,掌握了它,你就能快速地将你的脚本变成有图形界面的程序。

分享:
扫描分享到社交APP
上一篇
下一篇