python tkinter
基本使用
基于tkinter创建 GUI基本四步:窗口->组件->布局->事件
1.创建窗口对象
from tkinter import *root = Tk() # 创建窗口root.mainloop() # 进入事件循环
2.创建组件
按钮文本等组件
btn = Button(root) # 创建Button组件,使组件在root窗口展示
btn['text'] = '我是按钮' # 组件属性参数
3.布局管理
管理组件的大小位置样式
btn.pack() # 布局管理器,组件的大小位置样式
4.事件
通过与组件绑定,获取组件所触发的事件
def btn_event(obj): # obj 即事件对象print('控制台输出:'+'触发了事件') # 输出到控制台
btn.bind('<Button-1>', btn_event) # 事件和组件进行绑定
案例:
from tkinter import *
from tkinter import messageboxroot = Tk() # 创建窗口btn = Button(root) # 创建Button组件,使组件在root窗口展示
btn['text'] = '我是按钮'
btn.pack() # 布局管理器,配置组件的样式def btn_event(obj): # obj 即事件对象messagebox.showinfo("Message","触发了事件") # 弹出新的窗口,并展示内容print('控制台输出:'+'触发了事件') # 输出到控制台btn.bind('<Button-1>', btn_event) # 事件绑定,事件和组件进行绑定 <Button-1> :鼠标左键点击一次 <Button-2>:鼠标右键点击一次if __name__ == '__main__':root.mainloop() # 进入事件循环
主窗口
title('窗口标题')
geometry('wxh ± x, ±y')
- w:宽度
- h:高度
- +x:距屏幕左边的距离,-x:距屏幕右边的距离
- +y:距屏幕上边的距离,-y:距;屏幕下边的距离
root.geometry('500x300+100+200') # 宽度500,高度300,距左边100,距上边200
组件
Toplevel | 顶层 | 容器类,可为其他组件提供单独的容器,类似窗口 |
Button | 按钮 | 按钮点击组件 |
Ganvas | 画布 | 提供绘图功能 |
CheckButton | 复选框 | 可勾选的复选框 |
Entry | 单行输入框 | 可输入内容 |
Frame | 容器 | 用于装载其他组件 |
LabelFrame | 容器 | 类似Frame,但可以添加标题 |
label | 标签 | 显示不可编辑的文本或图标 |
Listbox | 列表框 | 可列出多个选项 |
Menu | 菜单 | 菜单组件 |
MenuButton | 菜单按钮 | 包含菜单的按钮,包括下拉层叠式等 |
OptionMenuu | 菜单按钮 | MenuButton的子类,可通过按钮打开一个菜单 |
Message | 消息框 | 可以显示多行文档 |
Frame容器
GUI编程就是编写一个个组件,界面由组件组成,组件内又可以创建组件,这种组件即为容器
import tkinter as tk
from tkinter import Frameroot = tk.Tk()
root.title('包含容器的GUI')
root.geometry('500x300+200+200')
frame = Frame(master=root) # 在root中创建容器
frame.pack()root.mainloop()
经典的面向对象的GUI
import tkinter as tk
from tkinter import *
from tkinter import messageboxroot = tk.Tk()
root.title('经典的面向对象的GUI')
root.geometry('500x300+200+200')class Application(Frame):def __init__(self, master):super().__init__(master)self.master = masterself.pack()self.create_widget()def create_widget(self):'''创建各种组件'''self.btn01 = Button(self, text='容器的按钮01', command=self.btn01_event) # 创建button组件,在Frame中显示,这里的self是Frameself.btn01.pack()self.btn02 = Button(self, text='退出', command=root.destroy)self.btn02.pack()def btn01_event(self):messagebox.showinfo('Message', '触发了事件')print('控制台输出:' + '触发了事件') # 输出到控制台def main():app = Application(root)root.mainloop()if __name__ == '__main__':main()
Label
- font:字体和大小,1个中文宽度两个字符,高度一个字符
- image:图片,目前支持gif
- fg:前景色,bg:背景色
- justigy:对齐方式,left、center、right
- width:宽度,heigth:高度
import tkinter as tk
from tkinter import *
from tkinter import messageboxroot = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')class Application(Frame):def __init__(self, master):super().__init__(master)self.master = masterself.pack()self.create_widget()def create_widget(self):'''创建各种组件'''# 文件标签self.text_label = Label(self, text='label组件',width=10, height=2, bg='black', fg='white', font=('黑体', 15), justify='left', borderwidth=1)self.text_label.pack()self.text_label2 = Label(self, text='label组件\nlabel组件内容不能修改\n哈哈',bg='black', fg='white', font=('黑体', 15), justify='left', borderwidth=1)self.text_label2.pack()# 图片标签global PHOTOPHOTO = PhotoImage(file='img.gif') # 注意:图片最好是全局变量self.photo_label = Label(root, image=PHOTO)self.photo_label.pack()def main():app = Application(root)root.mainloop()if __name__ == '__main__':main()
Button
import tkinter as tk
from tkinter import *
from tkinter import messageboxroot = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')PHOTO = PhotoImage(file='img.gif') # 注意:图片最好是全局变量class Application(Frame):def __init__(self, master):super().__init__(master)self.master = masterself.pack()self.create_widget()def create_widget(self):'''创建各种组件'''self.login_btn = Button(self, text='登录', command=self.login_event) # 创建button组件,在Frame中显示,这里的self是Frameself.login_btn.pack()self.image_btn = Button(self, image=PHOTO, command=self.image_event)self.image_btn.pack()self.image_btn['state'] = 'disable' # 按钮禁止点击def image_event(self):messagebox.showinfo('Message', '点击了图片')def login_event(self):messagebox.showinfo('Message', '登录成功')# print('控制台输出:' + '触发了事件') # 输出到控制台def main():app = Application(root)root.mainloop()if __name__ == '__main__':main()
Entry
import tkinter as tk
from tkinter import *
from tkinter import messageboxroot = tk.Tk()
root.title('我是窗口')
root.geometry('500x300+200+200')class Application(Frame):def __init__(self, master):super().__init__(master)self.master = masterself.pack()self.create_widget()def create_widget(self):'''创建各种组件'''self.user_label = Label(self, text='用户')self.user_label.pack()user_value = StringVar() # 定义变量,要用来接收Entry输入的值user_value.set('admin') # StringVar 的默认值self.user_entry = Entry(self, textvariable=user_value) # StringVar变量绑定到Entry组件self.user_entry.pack()print(user_value.get())print(self.user_entry.get())self.pwd_label = Label(self, text='密码')self.pwd_label.pack()pwd_value = StringVar()self.pwd_entry = Entry(self, textvariable=pwd_value, show="*") # 用户输入的内容展示成 *self.pwd_entry.pack()self.user_btn = Button(self, text='提交', command=self.login)self.user_btn.pack()def login(self):print('用户名: ' + self.user_entry.get()) # 获取输入框的值print('用户密码: ' + self.pwd_entry.get()) # 获取输入框的值messagebox.showinfo('Message', '登录成功')def main():app = Application(root)root.mainloop()if __name__ == '__main__':main()
相关文章:

python tkinter
基本使用 基于tkinter创建 GUI基本四步:窗口->组件->布局->事件 1.创建窗口对象 from tkinter import *root Tk() # 创建窗口root.mainloop() # 进入事件循环 2.创建组件 按钮文本等组件 btn Button(root) # 创建Button组件,使组件在…...
Flink CEP(复杂事件处理)高级进阶
Flink CEP(Complex Event Processing,复杂事件处理)是 Apache Flink 中用于复杂事件模式检测的库。它允许用户定义复杂的事件模式,从流数据中检测出符合模式的事件序列。这在实时监控、欺诈检测、用户行为分析等场景中非常有用。 Flink CEP 高级进阶 为了深入理解和使用 …...
libmodbus:写一个modbusTCP服务
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
函数模板(初阶)
Hello,大家好,我们大家都知道,C这个编程语言是由C语言继承而来的,因为是继承,所以我们的C就要做出一些区分,要不然的话,就和C语言没有本质上的区别了,我们现在在社会中使用比较多的是…...
中间件之RocketMQ
RocketMQ是一个开源的分布式消息队列系统,起源于阿里巴巴集团内部。最初,RocketMQ(前身为Metaq)被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不…...

linux第二课(docker的安装使用)
目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql 编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…...

Java数据存储结构——二叉查找树
文章目录 22.1.2二叉查找树22.1.2.1 概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3 二叉树遍历22.1.2.4 二叉查找树的弊端 22.1.2二叉查找树 22.1.2.1 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点: 每一个节点上最多有…...

JavaScript 事件处理
一、简介 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 事件源:事件触发的源头…...
容器技术--Docker应用部署
应用部署 容器部署mysql 搜索并拉取镜像;基于镜像启动容器,注意端口映射、目录映射启动后即可连接# 搜索镜像 docker search mysql # 拉取镜像 docker pull mysql:5.7 # docker pull mysql 默认拉取最新的# 创建mysql容器, -p端口映射(宿主端口:容器端口) -e 环境变量,镜…...

医院管理|基于java的医院管理系统小程序(源码+数据库+文档)
医院管理系统小程序 目录 基于java的医院管理系统小程序 一、前言 二、系统设计 三、系统功能设计 医生信息管理 排班信息管理 科室信息管理 科室预约 病历信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取:…...
golang学习笔记21——golang协程管理及sync.WaitGroup的使用
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...

C++初阶大全
目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…...
使用Redis实现用户关注博客的推模式
目录 一、思路 二、实现代码: 一、思路 发布者: 这里采用redis的zset结构,将键设置为被推送用户id,值设置为博客id,score设置为时间戳 推送之前先查到当前发布博客用户的粉丝有哪些,然后去循环挨个推送…...

python常用模块之time、datetime、randow(14)
文章目录 前言1、time模块1.1 导入模块1.2 使用方法1.2.1 时间戳1.2.2 程序休眠1.2.3 扩展:按某种格式显示当前时间1.2.4 结构化时间 2、datetime模块2.1 导入模块2.2 使用方法2.2.1 得到当前系统的时间2.2.2 拓展:编写一个时钟小程序 3、random模块3.1 …...

根据NVeloDocx Word模板引擎生成Word(六-结束)
前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍,这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容,给本系列来一个首尾。 本篇的主要内容有: 1、汇总计算&#…...
Android架构组件:MVVM模式的实战应用与数据绑定技巧
目录 引言 一、MVVM模式概述 1.1 MVVM模式简介 1.2 MVVM模式的优势 二、MVVM模式的实现 2.1 项目环境配置 2.2 创建MVVM组件 2.2.1 创建数据模型 2.2.2 创建数据仓库 2.2.3 创建ViewModel 2.2.4 创建布局文件 2.2.5 创建RecyclerView适配器 2.3 在Activity中绑定V…...

调用系统的录音设备提示:line with format PCM_SIGNED 16000.0 Hz
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 打开 设置->隐私->麦克风->允许应用访问你的麦克风 与 16000Hz没关系 与 16000Hz没关系 与 16000Hz没关系...
android BLE 蓝牙的连接(二)
下面是基于实际的项目得到的具体步骤及核心代码 1、权限问题 先判断手机是否满足android4.3以上版本,再判断手机是否开启蓝牙 主要涉及蓝牙权限和位置权限,注意不同android版本之间权限申请的差异,以及android权限动态申请和静态申请的区别 …...

改编pikachu的打靶经历(题目不全)
前言 题目很少,只做了一些。正常版本的,完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss (get)反射xss 先尝试 1 这里有长度限制,而且,我改了长度…...
Linux进阶 修改文件所有者
修改文件所属组群——chgrp 修改文件所属组群很简单-chgrp命令,就是change group的缩写(我们可以利用这些来记忆命令) 语法:chgrp 组群 文件名/目录 举例: [root@redhat ~]# groupadd groupa[root@redhat ~]# groupadd groupb[root@redhat ~]# useradd -g groupa zgz[r…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...