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

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基本四步&#xff1a;窗口->组件->布局->事件 1.创建窗口对象 from tkinter import *root Tk() # 创建窗口root.mainloop() # 进入事件循环 2.创建组件 按钮文本等组件 btn Button(root) # 创建Button组件&#xff0c;使组件在…...

Flink CEP(复杂事件处理)高级进阶

Flink CEP(Complex Event Processing,复杂事件处理)是 Apache Flink 中用于复杂事件模式检测的库。它允许用户定义复杂的事件模式,从流数据中检测出符合模式的事件序列。这在实时监控、欺诈检测、用户行为分析等场景中非常有用。 Flink CEP 高级进阶 为了深入理解和使用 …...

libmodbus:写一个modbusTCP服务

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

函数模板(初阶)

Hello&#xff0c;大家好&#xff0c;我们大家都知道&#xff0c;C这个编程语言是由C语言继承而来的&#xff0c;因为是继承&#xff0c;所以我们的C就要做出一些区分&#xff0c;要不然的话&#xff0c;就和C语言没有本质上的区别了&#xff0c;我们现在在社会中使用比较多的是…...

中间件之RocketMQ

RocketMQ是一个开源的分布式消息队列系统&#xff0c;起源于阿里巴巴集团内部。最初&#xff0c;RocketMQ&#xff08;前身为Metaq&#xff09;被设计为满足阿里巴巴集团内部大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。随着其在阿里巴巴内部的广泛应用和不…...

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 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点&#xff1a; 每一个节点上最多有…...

JavaScript 事件处理

一、简介 ​ 事件&#xff1a;发生在HTML元素上的事情&#xff0c;可以是用户的行为&#xff0c;也可以是浏览器的行为&#xff0c;如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源&#xff1a;事件触发的源头&#xf…...

容器技术--Docker应用部署

应用部署 容器部署mysql 搜索并拉取镜像;基于镜像启动容器,注意端口映射、目录映射启动后即可连接# 搜索镜像 docker search mysql # 拉取镜像 docker pull mysql:5.7 # docker pull mysql 默认拉取最新的# 创建mysql容器, -p端口映射(宿主端口:容器端口) -e 环境变量,镜…...

医院管理|基于java的医院管理系统小程序(源码+数据库+文档)

医院管理系统小程序 目录 基于java的医院管理系统小程序 一、前言 二、系统设计 三、系统功能设计 医生信息管理 排班信息管理 科室信息管理 科室预约 病历信息 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a;…...

golang学习笔记21——golang协程管理及sync.WaitGroup的使用

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

C++初阶大全

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…...

使用Redis实现用户关注博客的推模式

目录 一、思路 二、实现代码&#xff1a; 一、思路 发布者&#xff1a; 这里采用redis的zset结构&#xff0c;将键设置为被推送用户id&#xff0c;值设置为博客id&#xff0c;score设置为时间戳 推送之前先查到当前发布博客用户的粉丝有哪些&#xff0c;然后去循环挨个推送…...

python常用模块之time、datetime、randow(14)

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

根据NVeloDocx Word模板引擎生成Word(六-结束)

前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍&#xff0c;这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容&#xff0c;给本系列来一个首尾。 本篇的主要内容有&#xff1a; 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以上版本&#xff0c;再判断手机是否开启蓝牙 主要涉及蓝牙权限和位置权限&#xff0c;注意不同android版本之间权限申请的差异&#xff0c;以及android权限动态申请和静态申请的区别 …...

改编pikachu的打靶经历(题目不全)

前言 题目很少&#xff0c;只做了一些。正常版本的&#xff0c;完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss &#xff08;get&#xff09;反射xss 先尝试 1 这里有长度限制&#xff0c;而且&#xff0c;我改了长度&#xf…...

Linux进阶 修改文件所有者

修改文件所属组群——chgrp 修改文件所属组群很简单-chgrp命令,就是change group的缩写(我们可以利用这些来记忆命令) 语法:chgrp 组群 文件名/目录 举例: [root@redhat ~]# groupadd groupa[root@redhat ~]# groupadd groupb[root@redhat ~]# useradd -g groupa zgz[r…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...