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(表示中间)。ipadx、ipady:内边距的x方向和y方向padx、pady:外边距的x方向和y方向
2. grid 布局
使⽤ grid 布局的时候,我们使⽤ grid 函数,在⾥⾯指 定两个参数,⽤ row 表示⾏,⽤ column 表示列,注意的是 row 和 column 的编号都从 0 开始。支持以下参数:
row:所在行column:所在列sticky:它可以⽤ N,S,W,E 表示 上,下,左,右 , 它决定了这个组件是从哪个⽅向开始的。ipadx、ipady:内边距的x方向和y方向padx、pady:外边距的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 标准库中的一个模块,用于创建图形用户界面 (GUI)。它是 Python 中最常用的 GUI 库之一,因为它集成在 Python 的标准发行版中,无需额外安装即可使用。 一、基本用法 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 网页文件里面就可以实现瀑布流效果。项目免费开源,据介绍采用了HT…...
macos重装系统 启动U盘制作方法 - createinstallmedia 命令使用方法总结
macos重装系统比windows要稍微复杂一些,不过还好,macos系统安装app这个Apple官方提供的系统软件里面默认就内置了一个可用为我们制作启动盘的工具 createinstallmedia 我们下载的apple安装镜像要门是 dmg/pkg/iso 的压缩档案格式的,要么是 x…...
八问八答搞懂Transformer内部运作原理
最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…...
MySQL增删改查(基础)
1、. 新增(Create) 语法: INSERT [INTO] table_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ... 例子: -- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student (id INT,sn INT com…...
Cairo库移植到安卓记录
前言 接Android Studio引入ndk编译的so库的故事,这个东西搞了两周以后,由于自己不熟悉Java和安卓开发,踩了不少坑,其中一周时间都是花在怎么用Android Studio上的。。。AS下的新版本Koala,结果网上资料全是旧版本&…...
Redis 哈希类型的常用命令总结
1. hset 设置哈希表中字段的值。 hset key field value示例: hset user:1000 name "Alice"2. hget 获取哈希表中字段的值。 hget key field示例: hget user:1000 name3. hgetall 获取哈希表中所有的字段和值。 hgetall key示例&#x…...
【物联网设备端开发】ESP开发工具:QEMU如何模拟以太网口接入网络
以太网口支持 ESP-IDF中添加了对Opencores以太网MAC的支持。 运行以太网示例时,启用CONFIG_EXAMPLE_CONNECT_ETHERNET和 CONFIG_EXAMPLE_USE_OPENETH.。运行自定义应用程序时,启用CONFIG_ETH_USE_OPENETH 并初始化以太网驱动程序,如示例 /c…...
Python学习笔记(四)
# 数据容器分为5类,分别是:列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)""" 演示数据容器之:list列表 语法:[元素ÿ…...
跨域:安全分步实施指南
什么是跨域问题? 跨域(Cross-Origin Resource Sharing,CORS)问题发生在浏览器的同源策略(Same-Origin Policy)限制下。当一个域上的网页试图访问另一个域上的资源时,浏览器会阻止这些操作以保护…...
【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(TS)两者各有其优缺点,具体选择取决于你的项目需求和团队的开发习惯。以下是两者的一些比较: 1、使用 .proto 文件的优点: 跨语言支持:Protocol B…...
【python基础】while循环语句练习
明显可以感觉到循环比判断要更加难以理解一些,这个就只能通过练习来提高理解和思维能力了。 学习视频:第一阶段-第四章-05-while循环案例-九九乘法表_哔哩哔哩_bilibili 练习一:计算1-10的和 i1#循环的起始值 sum0 while i&l…...
【SpringBoot系列】WebMvcConfigurer配置
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
学懂C++ (十九):高级教程——深入详解C++信号处理
目录 C中的信号处理 1. 信号处理的本质 2. 主要信号类型 3. 核心关键点 4. 经典实例 代码分析 5. 进阶:信号屏蔽与多线程 例子:使用sigaction() 6. Windows中的信号处理 7. 比较与总结 示例:Windows控制台事件处理 总结 C中的信号…...
SOMEIP_ETS_032:echoUINT8ArrayMinSize
测试目的: 确保DUT能够正确处理最小尺寸的UINT8数组参数,并且在发送和接收过程中保持参数值和顺序不变。 描述 本测试用例旨在验证DUT在处理包含最小尺寸UINT8数组参数的SOME/IP消息时,是否能够准确地发送和接收这些参数,确保返…...
JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)
今天,我给大家分享一个原创的CSS菜单,整个菜单全由CSS写成,仅在切换布局时使用JS。合不合意,先看看效果图。 本例图片 接下来,我来详细给大家分享它的制作方法。 文件夹结构 因为涉及到了样式表切换,所以,你需要借鉴一下我的文件夹结构。 CSS文件夹: reset.css 用于…...
【数据结构】线性表,顺序表
一. 线性表 1. 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 2. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 3. 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
