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

tkinter用法总结

Tkinter 是 Python 标准库中的一个模块,用于创建图形用户界面 (GUI)。它是 Python 中最常用的 GUI 库之一,因为它集成在 Python 的标准发行版中,无需额外安装即可使用。

一、基本用法

1. 简单示例

import tkinter as tk# 创建主窗口
root = tk.Tk()
root.title("Hello Tkinter")# 创建标签并添加到主窗口
label = tk.Label(root, text="Hello, World!")
label.pack()# 运行主循环
root.mainloop()

2. 基本构成

二、组件用法

在 Python 的 tkinter 中,有 21 个核⼼组件,它们提供 了最基本的功能,这 21 个核⼼组件是 : Toplevel、Label、Button、Canvas、Checkbutton、Entry、Frame、LabelFrame、 Listbox、Menu、Menubutton、Message、OptionMenu、PaneWindow 、 Radiobutton 、 Scale 、Scrollbar 、Spinbox 、Text、Bitmap、Image

1. 窗口

import tkinter as tkroot = tk.Tk()
root.title("Main Window")	# 设置窗口标题
root.geometry("400x300")  	# 设置窗口大小
root.iconbitmap("ico.ico")	# 窗口图标
root.mainloop()

窗口的常用属性如下:

  • title:窗口标题
  • geometry :窗口大小设置
  • iconbitmap:窗口图标

2. 标签

标签可以说是最简单的窗⼝组件了,它不需要执⾏任何功能,只是⽤来显示信息。

label= Label(root, text = "欢迎来到tkinter")
label.pack()

3. 按钮

3.1 添加按钮

# 方式一
b1 = Button(root, text = "Python", command = myLabel)
b1.pack()# 方式二
b2 = Button(root, text = "Python") # command = myLabel ⽊有了
b2.bind("<Button-1>", myLabel) # 多了这⼀句

3.2 设置属性

button["width"] = 20			# 设置宽度
button["height"] = 4			# 设置高度
button["background"] = "white"	# 设置背景色

4. 输入框

输入框的类名为:Entry,如果需要密码框,则设置属性 show'*' 即可。

# ⽤户名
a_label = Label(root, text = "⽤户名:")
a_label.grid(row = 0, column = 0, sticky = W)
a_entry = Entry(root)
a_entry.grid(row = 0, column = 1, sticky = E)
# 密码
p_label = Label(root, text = "密码:")
p_label.grid(row = 1, column = 0, sticky = W)
p_entry = Entry(root)
p_entry["show"] = "*" # 密码显示为 *
p_entry.grid(row = 1, column = 1, sticky = E)print(f'用户名为:{a_label.get()}')

5. 文本域

text = Text(root, width = 50, height = 30)
text.pack()

6. 列表框

listbox = tk.Listbox(root)
listbox.insert(1, "Option 1")
listbox.insert(2, "Option 2")
listbox.pack()# 获取选中项
selected = listbox.get(listbox.curselection())

7. 复选框

var = tk.IntVar()
checkbutton = tk.Checkbutton(root, text="Check Me", variable=var)
checkbutton.pack()# 获取状态
status = var.get()  # 1 if checked, otherwise 0

8. 单选按钮

var = tk.StringVar(value="Option 1")
radiobutton1 = tk.Radiobutton(root, text="Option 1", variable=var, value="Option 1")
radiobutton2 = tk.Radiobutton(root, text="Option 2", variable=var, value="Option 2")
radiobutton1.pack()
radiobutton2.pack()# 获取选中项
selected = var.get()

9. 滑块

用于从范围中选择一个值。

scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL)
scale.pack()# 获取当前值
value = scale.get()

10. 滚动条

用于为其他小部件(如 Text、Listbox)提供滚动功能。

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)text_with_scroll = tk.Text(root, yscrollcommand=scrollbar.set)
text_with_scroll.pack(side=tk.LEFT)
scrollbar.config(command=text_with_scroll.yview)

11. 菜单

menu = tk.Menu(root)
root.config(menu=menu)file_menu = tk.Menu(menu)
menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New")
file_menu.add_command(label="Open")
file_menu.add_separator()
file_menu.add_command(label="Exit", command=root.quit)

12. 消息

用于显示多行不可编辑的文本,自动换行。

message = tk.Message(root, text="This is a message widget", width=200)
message.pack()

13. 画布

用于绘制图形、线条、矩形、椭圆等

canvas = tk.Canvas(root, width=200, height=100)
canvas.pack()# 绘制矩形
canvas.create_rectangle(50, 20, 150, 80, fill="blue")# 绘制椭圆
canvas.create_oval(50, 20, 150, 80, fill="red")

14. 进度条

progress = ttk.Progressbar(root, orient=tk.HORIZONTAL, length=200, mode='determinate')
progress.pack()
progress.start(10)  # 开始进度条

三、布局管理

tkinter的布局分为三种:

  • pack 布局:它⾮常简单,我们不⽤做过多的设置,直接使⽤⼀个 pack 函数就可以
  • grid 布局:grid 可以理解为⽹格或表格,它可以把界⾯设置为⼏⾏⼏列的⽹格,相对位置不改变
  • place 布局:使⽤固定的位置坐标来布局

1. pack 布局

使⽤ pack 函数的时候,默认先使⽤的放到上⾯,然后依次向下排,它会给我们的组件⼀个⾃认为合适的位置和⼤⼩。
pack 函数也可以接受⼏个参数:

  • side 参数指定了它停 靠在哪个⽅向,可以为 LEFT,TOP,RIGHT,BOTTOM,分别代表 左,上,右,下
  • fill 参数可以是 X,Y,BOTH 和 NONE,即在⽔平⽅向填充,竖直⽅向填充,⽔平和竖直⽅向填充和不填充。
  • expand 参数可以是 YES 和 NO,它的 anchor 参数可 以是 N,E,S,W(这⾥的 NESW 分别表示北东南⻄,这⾥分别 表示上右下左)以及他们的组合或者是CENTER(表示中间)。
  • ipadxipady:内边距的x方向和y方向
  • padxpady:外边距的x方向和y方向

2. grid 布局

使⽤ grid 布局的时候,我们使⽤ grid 函数,在⾥⾯指 定两个参数,⽤ row 表示⾏,⽤ column 表示列,注意的是 row 和 column 的编号都从 0 开始。支持以下参数:

  • row:所在行
  • column:所在列
  • sticky:它可以⽤ N,S,W,E 表示 上,下,左,右 , 它决定了这个组件是从哪个⽅向开始的。
  • ipadxipady:内边距的x方向和y方向
  • padxpady:外边距的x方向和y方向
  • rowspan:表示跨越的行数
  • columnspan:表示跨越的列数
from tkinter import *
py = Tk()
Label(py, text = "账号:").grid(row = 0, sticky = W)
Entry(py).grid(row = 0, column = 1, sticky = E)
Label(py, text = "密码:").grid(row = 1, sticky = W)
Entry(py).grid(row = 1, column = 1, sticky = E)
Button(py, text = "登录").grid(row = 2, column = 1, sticky = E)
py.mainloop()

在这里插入图片描述

3. place 布局

它使⽤ place 函数,它分为 绝对布局 和 相对布局 ,绝对布局使⽤ x 和 y 参数,相对布局使⽤ relx,rely, relheight 和 relwidth 参数。

4. 总结

  • place 不推荐使⽤,pack 和 grid 布局更常⽤⼀些
  • 如果布局相对简单,建议使⽤pack
  • 如果布局相对复杂,建议使用grid
  • pack 和 grid 不能同时使用

四、事件

我们的很多操作,⽐如我们点击了⼀下⿏标,这就是⼀个事件,⽽操作系统会根据我们的相应的事件产⽣相应的消息,操作系统把消息传递给我们的应⽤程序,然后我们的应⽤程序根据操作系统传⼊的数据执⾏相应的命令。
事件是我们触发的,消息是操作系统根据我们的事件产⽣的,我们通常对于“消息”并不多关注,我们重视的是 “事件”。

1. 常用事件

  • <Button-1>: 表示⿏标左键单击
  • <Button-2>: 表示⿏标中键单击
  • <Button-3>: 表示⿏标右键单击
  • <KeyPress-A>:表示 A 键被按下,其中的 A 可以换成其他的键位
  • <Control-V>:表示按下的是 Ctrl 和 V 键,V 可以换成其他键位
  • <F1>:表示按下的是 F1 键,对于 Fn 系列的改变数字即可

2. 事件绑定

以下代码可实现标签模拟按钮的操作

n = Label(py, text = "我可不是真Button哟~")
n.bind("<Button-1>", myLabel)
n.pack()

3. bind 函数

  • bind():第一个参数为事件,第二个参数为回调函数名,用于绑定指定控件
  • bind_all():它的参数类型和 bind ⼀样,它通常⽤于全局的快捷键,⽐如 F1 通常 是⽤来打开帮助⽂档
  • bind_class():它接受三个参数, 第⼀个参数是类名,第⼆个参数是事件类型,第三个参数 是相应的操作
  • unbind():解除绑定事件
# 绑定了所有的输⼊框的 Ctrl+V 表示粘贴
w.bind_class('Entry','<Control-V>', my_paste)

五、常见案例

相关文章:

tkinter用法总结

Tkinter 是 Python 标准库中的一个模块&#xff0c;用于创建图形用户界面 (GUI)。它是 Python 中最常用的 GUI 库之一&#xff0c;因为它集成在 Python 的标准发行版中&#xff0c;无需额外安装即可使用。 一、基本用法 1. 简单示例 import tkinter as tk# 创建主窗口 root …...

iOS基础-Block

系列文章目录 文章目录 系列文章目录一、Block是什么二、Block的使用场景1. 异步操作和完成处理器2. 动画3. 集合操作4. 定时器5. 自定义控件的事件处理6.错误处理 三、Block的底层实现1.结构分析2.Block的类型3.Block的copy4.变量捕捉 四、Block的使用细节1.auto变量的生命周期…...

本地图片瀑布流浏览器asonry Image Viewer

本地图片瀑布流浏览器asonry Image Viewer 前言效果图部分源码领取完整源码下期更新 前言 一款采用 HTML 的瀑布流本地图片浏览器「Masonry Image Viewer」只需要把你的图片文件夹拖到下载的 index 网页文件里面就可以实现瀑布流效果。项目免费开源&#xff0c;据介绍采用了HT…...

macos重装系统 启动U盘制作方法 - createinstallmedia 命令使用方法总结

macos重装系统比windows要稍微复杂一些&#xff0c;不过还好&#xff0c;macos系统安装app这个Apple官方提供的系统软件里面默认就内置了一个可用为我们制作启动盘的工具 createinstallmedia 我们下载的apple安装镜像要门是 dmg/pkg/iso 的压缩档案格式的&#xff0c;要么是 x…...

八问八答搞懂Transformer内部运作原理

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友…...

MySQL增删改查(基础)

1、. 新增&#xff08;Create&#xff09; 语法&#xff1a; INSERT [INTO] table_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ... 例子&#xff1a; -- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student (id INT,sn INT com…...

Cairo库移植到安卓记录

前言 接Android Studio引入ndk编译的so库的故事&#xff0c;这个东西搞了两周以后&#xff0c;由于自己不熟悉Java和安卓开发&#xff0c;踩了不少坑&#xff0c;其中一周时间都是花在怎么用Android Studio上的。。。AS下的新版本Koala&#xff0c;结果网上资料全是旧版本&…...

Redis 哈希类型的常用命令总结

1. hset 设置哈希表中字段的值。 hset key field value示例&#xff1a; hset user:1000 name "Alice"2. hget 获取哈希表中字段的值。 hget key field示例&#xff1a; hget user:1000 name3. hgetall 获取哈希表中所有的字段和值。 hgetall key示例&#x…...

【物联网设备端开发】ESP开发工具:QEMU如何模拟以太网口接入网络

以太网口支持 ESP-IDF中添加了对Opencores以太网MAC的支持。 运行以太网示例时&#xff0c;启用CONFIG_EXAMPLE_CONNECT_ETHERNET和 CONFIG_EXAMPLE_USE_OPENETH.。运行自定义应用程序时&#xff0c;启用CONFIG_ETH_USE_OPENETH 并初始化以太网驱动程序&#xff0c;如示例 /c…...

Python学习笔记(四)

# 数据容器分为5类&#xff0c;分别是&#xff1a;列表&#xff08;list)、元组&#xff08;tuple)、字符串&#xff08;str&#xff09;、集合&#xff08;set)、字典&#xff08;dict)""" 演示数据容器之&#xff1a;list列表 语法&#xff1a;[元素&#xff…...

跨域:安全分步实施指南

什么是跨域问题&#xff1f; 跨域&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;问题发生在浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;限制下。当一个域上的网页试图访问另一个域上的资源时&#xff0c;浏览器会阻止这些操作以保护…...

【iOS】AutoreleasePool自动释放池的实现原理

目录 ARC与MRC项目中的main函数自动释放池autoreleasepool {}实现原理AutoreleasePoolPage总结 objc_autoreleasePoolPush的源码分析autoreleaseNewPageautoreleaseFullPageautoreleaseNoPage autoreleaseFast总结 autorelease方法源码分析objc_autoreleasePoolPop的源码分析po…...

stm32—GPIO

0. 引入 在单片机产品中,我们常常可以见到三种模块:LCD灯、KEY按键、BEEP蜂鸣器 LED灯: 一个比较常见的LED电路LED0 ---------- 通过控制LED0引脚(电线) 给它一个低电平(低电压),LED灯就会亮 给它一个高电平(高电压),LED灯就会灭 …...

CocosCreator使用 ProtoBuf WebSocket与服务器对接方法

在 Cocos Creator 中使用 .proto 文件和转换成 TypeScript&#xff08;TS&#xff09;两者各有其优缺点&#xff0c;具体选择取决于你的项目需求和团队的开发习惯。以下是两者的一些比较&#xff1a; 1、使用 .proto 文件的优点&#xff1a; 跨语言支持&#xff1a;Protocol B…...

【python基础】while循环语句练习

明显可以感觉到循环比判断要更加难以理解一些&#xff0c;这个就只能通过练习来提高理解和思维能力了。 学习视频&#xff1a;第一阶段-第四章-05-while循环案例-九九乘法表_哔哩哔哩_bilibili 练习一&#xff1a;计算1-10的和 i1#循环的起始值 sum0 while i&l…...

【SpringBoot系列】WebMvcConfigurer配置

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

学懂C++ (十九):高级教程——深入详解C++信号处理

目录 C中的信号处理 1. 信号处理的本质 2. 主要信号类型 3. 核心关键点 4. 经典实例 代码分析 5. 进阶&#xff1a;信号屏蔽与多线程 例子&#xff1a;使用sigaction() 6. Windows中的信号处理 7. 比较与总结 示例&#xff1a;Windows控制台事件处理 总结 C中的信号…...

SOMEIP_ETS_032:echoUINT8ArrayMinSize

测试目的&#xff1a; 确保DUT能够正确处理最小尺寸的UINT8数组参数&#xff0c;并且在发送和接收过程中保持参数值和顺序不变。 描述 本测试用例旨在验证DUT在处理包含最小尺寸UINT8数组参数的SOME/IP消息时&#xff0c;是否能够准确地发送和接收这些参数&#xff0c;确保返…...

JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)

今天,我给大家分享一个原创的CSS菜单,整个菜单全由CSS写成,仅在切换布局时使用JS。合不合意,先看看效果图。 本例图片 接下来,我来详细给大家分享它的制作方法。 文件夹结构 因为涉及到了样式表切换,所以,你需要借鉴一下我的文件夹结构。 CSS文件夹: reset.css 用于…...

【数据结构】线性表,顺序表

一. 线性表 1. 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 2. 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 3. 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是在物理…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...