当前位置: 首页 > 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…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

全面解析各类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&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...