工具使用记录-Tkinter

最近在用Tkinter做桌面端的应用,这里做个简单的记录

前言

Tkinter 是 Python 的标准 GUI(图形用户界面)库,它是一个轻量级框架,使用方便,适合快速开发桌面应用。通过 Tkinter,可以创建窗口、按钮、文本框、标签、菜单、对话框等常见的 GUI 组件。

1、Tkinter 组件概述

  • 主窗口:应用程序的主窗口(Tk 对象)。
  • 标签 (Label):用于显示文本或图片。
  • 按钮 (Button):用于触发特定事件或操作。
  • 文本框 (Entry):单行输入框,用于接收用户输入。
  • 多行文本框 (Text):用于接收多行文本输入。
  • 复选框 (Checkbutton):用于显示二元状态(选中/未选中)。
  • 单选按钮 (Radiobutton):一组互斥的按钮,用户只能选择一个。
  • 列表框 (Listbox):用于显示列表项。
  • 菜单 (Menu):用于创建下拉菜单、上下文菜单等。
  • 框架 (Frame):用于组织布局,可以包含其他组件。

1.1 Tkinter 的核心组件详细介绍

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter Example")
root.geometry("400x300")  # 设置窗口大小

# 创建标签
label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 16))
label.pack(pady=10)  # 使用 pack 布局管理器

# 创建按钮,点击按钮时触发事件
def on_button_click():
    label.config(text="Button Clicked!")

button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack(pady=10)

# 进入主循环,显示窗口
root.mainloop()


1.1.1. Tk (主窗口)

  • root = tk.Tk() 创建主窗口。
  • root.title(“Title”) 设置窗口标题。
  • root.geometry(“400x300”) 设置窗口的初始大小。

1.1.2 Label (标签)

  • label = tk.Label(root, text=“Hello, Tkinter!”) 创建一个标签,text 是要显示的内容。
  • label.pack() 将标签放置在主窗口中,使用 pack() 布局管理器。

1.1.3 Button (按钮)

  • button = tk.Button(root, text=“Click Me”, command=on_button_click) 创建一个按钮,command 绑定点击按钮时调用的函数。

1.1.4 Entry (文本框)

  • entry = tk.Entry(root) 创建单行文本输入框。
  • entry.get() 获取文本框中的值。
  • entry.insert(0, “default text”) 在文本框中插入默认文本。

1.1.5 Text (多行文本框)

  • text = tk.Text(root) 创建多行文本框,用于接收大段文本。
  • text.insert(“1.0”, “Enter your text here”) 在文本框的第1行第0列插入文本。
  • text.get(“1.0”, tk.END) 获取文本框内容。

1.1.6 Menu (菜单)

menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)

1.1.7Frame (框架)

  • frame = tk.Frame(root) 创建框架,用于组织布局。

2、Tkinter 的布局管理器

Tkinter 提供了三种布局管理器,分别是 pack、grid 和 place:

  • pack():根据组件的顺序自动排列布局。
  • grid():基于网格系统进行布局,可以将组件放在指定的行和列中。
  • place():基于绝对坐标进行布局,灵活度高,但需手动控制位置。

杂记

1、StringVar

StringVar 是 Tkinter 提供的一个特殊变量类,用于与 Tkinter 界面组件中的字符串值进行绑定和控制。它可以用于追踪、设置和更新字符串类型的变量,从而实现界面组件的动态数据更新。

StringVar 通常用于和 Label、Entry 等组件的值进行双向绑定,这样在后台修改 StringVar 的值时,界面上对应的组件也会同步更新,反之亦然。

1.1 StringVar 的常见用法

  • 初始化 StringVar: 使用 StringVar() 创建一个字符串变量。

  • 设置值: 使用 set() 方法给 StringVar 赋值。

  • 获取值: 使用 get() 方法获取 StringVar 当前的值。

  • 与 Tkinter 组件绑定: 通过 textvariable 参数将 StringVar 绑定到 Tkinter 组件(如 Entry、Label),当 StringVar 的值改变时,组件的内容会自动更新。

2、BooleanVar

BooleanVar是 Tkinter 提供的一个变量类,用于处理布尔类型的数据(即 True 或 False)。它与 StringVar 类似,通常用于和 Checkbutton 组件绑定,以追踪和更新复选框的选中状态。

通过 BooleanVar,可以将布尔值绑定到 Tkinter 组件,使得界面和后台的布尔值可以自动同步更新。

2.1 BooleanVar 的常见用法

  • 初始化 BooleanVar:使用 BooleanVar() 创建一个布尔变量。
  • 设置值:使用 set(True) 或 set(False) 方法设置布尔值。
  • 获取值:使用 get() 方法获取当前的布尔值。
  • 与 Checkbutton 组件绑定:通过 variable 参数将 BooleanVar 绑定到 Checkbutton 组件,当复选框的状态改变时,BooleanVar 的值会自动更新。

3、frame布局

3.1 frame.place

son_frame = Frame(parent_frame)  # 在 'parent_frame' 中创建一个 Frame 小部件
son_frame.place(relx=0.5, rely=0.0, x=-10, y=0)  # 使用 place() 将 son_frame 放置在指定位置
  • place() 方法允许通过相对坐标和绝对坐标来放置小部件。
  • relx=0.5:表示相对于父框架水平位置的50%处(即水平居中)。
  • rely=0.0:表示相对于父框架垂直位置的0%处(即顶部)。
  • x=-10:在相对位置基础上,向左移动10个像素。
  • y=0:垂直方向上没有额外的偏移。

这段代码会将 son_frame 放置在 parent_frame 的水平中心位置,稍微向左偏移10个像素,并且在顶部对齐。

3.2 sticky

sticky 是 grid() 的一个选项,用于指定小部件在单元格内的对齐方式。

sticky 的取值可以是 “n”, “s”, “e”, “w”(代表北、南、东、西四个方向),或者它们的组合。比如:

  • sticky=“n”:表示顶部对齐(北)。
  • sticky=“e”:表示右对齐(东)。
  • sticky=“w”:表示左对齐(西)。
  • sticky=“s”:表示底部对齐(南)。
  • sticky=“nsew”:表示小部件填满整个单元格,并向四个方向拉伸。

4、textvariable

textvariable 是 Entry, Label, Button 等小部件的一个选项,用来将它们与一个 Tkinter 变量(如 StringVar)绑定。这样,可以动态更新小部件的内容或从小部件获取值。

4.1 textvariable 的使用场景:

获取输入框的值:通过绑定 Entry 小部件与 StringVar,你可以直接获取或设置输入框的值。
动态更新标签或按钮的文字:通过改变 StringVar 的值,可以动态更新小部件的显示内容。

4.2 使用 textvariable 的步骤:

  1. 创建一个 Tkinter 变量(例如 StringVar)。
  2. 将该变量与小部件的 textvariable 选项绑定。
  3. 修改或读取该变量的值
import tkinter as tk

def update_label():
    # 从 Entry 中获取值并更新 Label
    label_var.set(entry_var.get())

root = tk.Tk()
root.geometry("300x200")

# 创建 StringVar 变量
entry_var = tk.StringVar()
label_var = tk.StringVar()

# 创建 Entry 并绑定 textvariable
entry = tk.Entry(root, textvariable=entry_var)
entry.pack(pady=10)

# 创建 Label 并绑定 textvariable
label = tk.Label(root, textvariable=label_var, font=('Arial', 16))
label.pack(pady=10)

# 创建按钮来更新 Label 的内容
button = tk.Button(root, text="更新标签", command=update_label)
button.pack(pady=10)

root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值