当前位置: 首页 > news >正文

工具使用记录-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”:表示小部件填满整个单元格,并向四个方向拉伸。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Leetcode 无重复字符的最长子串
  • slf4j依赖冲突处理
  • torchvision.transforms.ToPILImage()使用
  • MySQL 故障排查与性能优化指南
  • 韶音开放式耳机好用吗?南卡、韶音、Oladance、Cleer热门开放式耳机一周横评
  • 【Gateway】网关服务快速上手
  • uniapp数据缓存和发起网络请求
  • Unity Apple Vision Pro 开发(五):PolySpatial 2.0 导入方式
  • flink中slotSharingGroup() 的详解
  • 相亲交友程序系统开发产品分析
  • 【H2O2|全栈】关于HTML(4)HTML基础(三)
  • 掌握Go语言中的时间与日期操作
  • 影刀RPA实战:自动化批量生成条形码完整指南
  • 设计模式 解释器模式(Interpreter Pattern)
  • spark任务优化参数整理
  • 77. Combinations
  • AWS实战 - 利用IAM对S3做访问控制
  • Brief introduction of how to 'Call, Apply and Bind'
  • Java 内存分配及垃圾回收机制初探
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS笔记四:作用域、变量(函数)提升
  • k个最大的数及变种小结
  • laravel with 查询列表限制条数
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • webpack入门学习手记(二)
  • 编写高质量JavaScript代码之并发
  • 从0到1:PostCSS 插件开发最佳实践
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 缓存与缓冲
  • 基于axios的vue插件,让http请求更简单
  • 记录一下第一次使用npm
  • 老板让我十分钟上手nx-admin
  • 力扣(LeetCode)965
  • 利用DataURL技术在网页上显示图片
  • 码农张的Bug人生 - 见面之礼
  • 探索 JS 中的模块化
  • 微信开放平台全网发布【失败】的几点排查方法
  • - 转 Ext2.0 form使用实例
  • ​力扣解法汇总946-验证栈序列
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 数据结构
  • #includecmath
  • #vue3 实现前端下载excel文件模板功能
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (不用互三)AI绘画工具应该如何选择
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core使用ef 6
  • .Net 路由处理厉害了
  • .NET处理HTTP请求
  • ::