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…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
