Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]
本文介绍了GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,反正我是小白从0开始,主要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Label(我一直以为是Lable)、option、Button(后续还会涉及到),其实很多代码部分是重复的,因为框架是固定的,跟着敲两遍就记住了,还是要动手。
以前不知道Python的前端长什么样,现在知道喽~~ 感觉Django也不错,下次可以试试。
还是希望佬们能点个赞吧!!!
目录
1. tinkter库
2. 窗口大小和位置
3. GUI编程整体描述_重要组件汇总
4. GUI程序的景点面向对象写法
5. Label组件_tkinter中图像正确显示全局变量的写法
1. 显示文本
2. 显示图像
3. 自定义样式
4. 锚点和位置
5. 响应事件
实例代码展示:
6. options选项详解--底层源码分析和阅读_可变参数 运算符 重载(复习)
1. 可变参数指的是“可变数量的参数”。分两种情况:
2. 设置option选项
7. Button_anchor(锚点)位置控制
8. Entry_StringVar登录界面设计和功能实现
1. tinkter库
2. 窗口大小和位置
tkinter 主窗口
geometry('wxh+/-x/y')来进行设置窗口的大小和位置
# P1 Tkinter库
# P2 tkinter 主窗口
# geometry('wxh+/-x/y')来进行设置
from tkinter import *
from tkinter import messagebox
root = Tk() # 窗口对象
root.title('我的第一个GUI程序')
root.geometry('500x300+100+200')
# 组件
btn01 = Button(root)
btn01["text"] = "点我就送花"
# 布局管理器
btn01.pack() #
# 定义事件
def songhua(e): # e表示事件对象messagebox.showinfo('Message', '送你一朵小红花')print('爱你99')
# 事件绑定
btn01.bind("<Button-1>", songhua) # <Button-1>表示鼠标左键单击
root.mainloop() # 窗口 调用组件的mainloop()方法,进入事件循环

3. GUI编程整体描述_重要组件汇总

4. GUI程序的景点面向对象写法
# P4 GUI程序的景点面向对象写法
"""测试一个经典的GUI程序写法,使用面向对象的方式"""
from tkinter import *
from tkinter import messagebox
# Frame 是一个组件
class Application(Frame):def __init__(self, master=None):super().__init__(master) # 调用父类Frame的方法self.master = masterself.pack() #布局管理器self.createWidget()
def createWidget(self):"""创建组件"""self.btn01 = Button(self)self.btn01["text"] = '点击送花'self.btn01.pack()self.btn01["command"] = self.songhua
# 创建一个退出按钮self.btn01Quit = Button(self, text="退出", command=root.destroy)self.btn01Quit.pack()
def songhua(self):messagebox.showinfo('送花', '送你一朵小红花')
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('500x300+100+200')root.title('一个经典的GUI程序类的测试')app = Application(master=root)
root.mainloop() # 事件循环

5. Label组件_tkinter中图像正确显示全局变量的写法
Label(标签)主要用于显示文本信息,也可以显示图像(不可编辑)。
Label的主要标签 : 文心一言
在Tkinter中,虽然通常我们提到的是Label(用于显示文本信息,但Tkinter的Label组件实际上也支持显示图像。要在Tkinter中使用Label显示图像,你通常会使用PhotoImage(对于Tkinter支持的图像格式,如GIF和PPM)或者通过PIL(Python Imaging Library,现在更常用的是Pillow库)来加载和处理更广泛的图像格式(如JPEG、PNG等),然后将这些图像作为Label的image属性来显示。
关于Label组件的常用功能和几个简单介绍:
1. 显示文本
Label组件最基本的功能就是显示文本。你可以通过text参数来指定要显示的文本内容。
from tkinter import Tk, Label
root = Tk()
label = Label(root, text="Hello, Tkinter!")
label.pack()
root.mainloop()
2. 显示图像
为了显示图像,你需要先加载图像,然后将其作为Label的image属性。注意,对于非GIF图像,你可能需要使用Pillow库。
from tkinter import Tk, Label
from PIL import Image, ImageTk
root = Tk()
# 假设你有一个名为'image.png'的图像文件
image = Image.open("image.png")
photo = ImageTk.PhotoImage(image)
label = Label(root, image=photo)
label.image = photo # 保留对图像的引用,防止被垃圾回收
label.pack()
root.mainloop()
3. 自定义样式
Label组件支持多种样式自定义,比如你可以通过fg(前景色,即文本颜色)和bg(背景色)来设置文本和背景的颜色。
label = Label(root, text="Colored Text", fg="blue", bg="yellow")
4. 锚点和位置
你可以通过anchor参数来设置文本或图像在Label中的锚点位置(如左上角、中心、右下角等),以及通过布局管理器(如pack(), grid(), place())来控制Label在窗口中的位置。
label = Label(root, text="Centered Text", anchor="center") label.pack(expand=True) # 使用pack时,expand=True可以让Label扩展以填充整个窗口
5. 响应事件
虽然Label本身不是为交互设计的,但你可以通过将其与事件(如鼠标点击)绑定来创建简单的交互。不过,这通常需要与另一个组件(如Button)结合使用,或者通过自定义的方式来捕捉事件。
def on_click(event):print("Label clicked!")
label = Label(root, text="Click Me")
label.bind("<Button-1>", on_click) # 绑定鼠标左键点击事件
label.pack()
请注意,直接在Label上绑定事件并不是常见的做法,因为它主要是为显示信息而设计的。对于需要用户交互的场景,使用Button或Canvas等组件可能更合适。
实例代码展示:
# P5 Label组件_tkinter中图像正确显示全局变量的写法
from tkinter import *
# from tkinter import messagebox
class Application(Frame):def __init__(self, master=None):super().__init__(master) # 调用父类Frame的方法self.master = masterself.pack() #布局管理器self.createWidget()
def createWidget(self):"""创建组件"""self.label01 = Label(self,text="百战成诗",width=10,height=2,bg="black",fg="white")self.label01.pack()
self.label02 = Label(self, text="百战不衰", width=12, height=2,bg="blue", fg="white",font=('黑体',30))self.label02.pack()# 显示图像global photo #设置为全局变量,如果是局部变量本方法执行完毕后,图像对象会被销毁,窗口不会显示图像photo = PhotoImage(file="img/01.gif")self.label03 = Label(self,image=photo)self.label03.pack()
# 显示多行文本# relief = "groove",边框显示效果 justify = "right" 右对齐(对齐方式)self.label04 = Label(self,text="巴黎奥运会,中国最棒,加油中国健将们",borderwidth=2,relief="groove",justify="right",font=5)self.label04.pack()
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('800x800+200+200')root.title('测试Label')app = Application(master=root)root.mainloop() # 事件循环

6. options选项详解--底层源码分析和阅读_可变参数 运算符 重载(复习)
1. 可变参数指的是“可变数量的参数”。分两种情况:
-
*param(一个星号),将多个参数收集到一个“元组”对象中。
-
**param(两个星号),将多个参数收集到一个“字典”对象中。

2. 设置option选项

7. Button_anchor(锚点)位置控制

import tkinter as tk
def on_button_click():print("按钮被点击了!")
# 创建主窗口
root = tk.Tk()
root.title("Button 示例")
# 创建一个按钮
# 参数:主窗口, 文本, 命令(点击时调用的函数)
button = tk.Button(root, text="点击我", command=on_button_click)
# 将按钮放置到主窗口中
button.pack(pady=20) # pady参数用于在按钮和窗口边缘之间添加垂直填充
# 启动事件循环
root.mainloop()

8. Entry_StringVar登录界面设计和功能实现
Entry用来接收一行字符串的控件,如果用户输入的文字长度长于 Entry控件的宽度时,文字会自动向后滚动,如果相输入多行文本,需要使用Text控件。
# p8
from tkinter import *
from tkinter import messagebox
# Frame 是一个组件
class Application(Frame):def __init__(self, master=None):super().__init__(master) # 调用父类Frame的方法self.master = masterself.pack() #布局管理器self.createWidget()
def createWidget(self):# 创建登录界面组件self.label01 = Label(self,text='用户名')self.label01.pack()
# StringVar变量绑定到指定的组件。# StringVar变量的值发生变化,组件的值也发生变化# 组件内容发生变化,StringVar变量的值也发生变化# 双向关联的作用???v1 = StringVar() # 数据类型 intVar...self.entry01 = Entry(self,textvariable=v1)self.entry01.pack()v1.set("admain")print(v1.get());print(self.entry01.get())
# 创建密码框self.label02 = Label(self, text='密码')self.label02.pack()v2 = StringVar()self.entry02 = Entry(self, textvariable=v2,show='*')self.entry02.pack()v2.set("admain")print(v2.get());print(self.entry02.get())
Button(self,text="登录",command=self.login).pack()
def login(self):# 定义变量进行接收username = self.entry01.get()password = self.entry02.get()print("去数据库比对用户名和密码")print("用户名:"+username)print(f"密码{password}")
if username == "haha" and password == "110":messagebox.showinfo('郑州大学', '上岸成功!欢迎登录!')else:messagebox.showinfo('郑州大学', '用户名或密码错误,登录失败')
if __name__ == '__main__':# 创建根窗口对象root = Tk()root.geometry('500x300-100-200')app = Application(master=root)root.mainloop() # 事件循环

相关文章:
Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]
本文介绍了GUI的图形界面编程(相关视频是哔站上的应该搜这个题目就能找到),文章还是很基础的,反正我是小白从0开始,主要的结构tinkter库、重要组件简介(这个不用死记硬背 用的时候再说)、Label&…...
Vue2和Vue3中的diff算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、diff算法是什么?二、vue2中的diff算法三、vue3中的diff算法总结 前言 一、diff算法是什么? diff算法很早就存在了,一开…...
springboot使用aop或Jackson进行数据脱敏
1.aop 启动类加EnableAspectJAutoProxy 自定义注解,在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截,这种我试了,拦截不住。猜测在mvc返…...
【Solidity】基础介绍
数据类型 值类型 值类型的变量在赋值或作为函数参数传递时会被复制。 布尔类型:bool整数类型: 无符号:uint8、uint16、…、uint256 (uint256 可简写为 uint)有符号:int8、int16、…、int256 (int256可简写为 int) 地址类型&…...
【SpringBoot3】双向实时通讯 websocket
文章目录 一、Websocket使用步骤二、示例1:继承抽象类 AbstractWebSocketHandler后端代码前端代码 三、示例2:使用注解ServerEndpoint后端代码前端代码 四、前端代码封装 一、Websocket使用步骤 在Spring Boot中使用WebSocket是一个常见的需求ÿ…...
搭建内网开发环境(一)|基于docker快速部署开发环境
引言 最近因需要搭建一套简易版的纯内网的开发环境,服务器采用 centos8.0,容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类: 软件安装和使用,这类是开发环境常用的软件部署和使用,涉…...
MATLAB R2023b配置Fortran编译器
MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时,整个配置流程较繁琐。下面以MATLAB R2023b为例࿰…...
2024新型数字政府综合解决方案(七)
新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术,创建了一个高度智能化和互联互通的政府服务平台,旨在全面提升行政效率、服务质量和透明度。该平台实现了跨部门的数据整合与实时共享,利用人工智能进行智能决策支持和…...
搭建高可用k8s集群
高可用 Kubernetes V1.28.10 安装 文章目录 1. 环境介绍2. 准备工作2.1 修改主机名称2.2 修改hosts文件2.3 关闭防火墙和SLinux2.4 配置SSH免密访问2.4.1 主机名称: k8s-master-01 操作 2.5 配置yum源2.6 禁用Swarp分区2.7 同步时间2.8 配置内核转发及网桥过滤2.9 安装 IPVS 3…...
完美解决html2canvas + jsPDF导出pdf分页内容截断问题
代码地址:https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案,但是在实践过程中,遇到的最大问题就是分页截断的问题:当页面元素超过一页A4纸的时候,连续的页面就会…...
14 地址映射
14 地址映射 1、地址划分2、相关函数2.1 ioremap/iounmap2.2 mmap地址映射 3、总结 1、地址划分 明确:在linux系统中,不管是应用程序还是驱动程序,都不允许直接访问外设的物理地址,要想访问必须将物理地址映射到用户虚拟地址或者内核虚拟地址࿰…...
Java Resilience4j-RateLimiter学习
一. 介绍 Resilience4j-RateLimiter 是 Resilience4j 中的一个限流模块,我们对 Resilience4j 的 CircuitBreaker、Retry 已经有了一定的了解,现在来学习 RateLimiter 限流器; 引入依赖; <dependency><groupId>io.g…...
Nginx--地址重写Rewrite
一、什么是Rewrite Rewrite对称URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id123 使用U…...
webflux源码解析(1)-主流程
目录 1.关键实例的创建1.1 实例创建1.2 初始化 2.处理请求的关键流程2.1 从ReactorHttpHandlerAdapter开始2.1 DispatcherHandler的初始化2.2查找mapping handler2.3 处理请求(执行handler)2.4 返回结果处理 3.webflux的配置装配参考: WebFlux是Spring 5.0框架推出的…...
ipad作为扩展屏的最简单方式
将iPad用作扩展屏幕有几种简单而有效的方法。以下是几种常见的方式: 1. Sidecar(苹果官方功能) 适用设备:iPad和Mac(macOS Catalina及以上版本)。功能:Sidecar 是苹果官方的功能,可…...
【卡码网Python基础课 17.判断集合成员】
目录 题目描述与分析一、集合二、集合的常用方法三、代码编写 题目描述与分析 题目描述: 请你编写一个程序,判断给定的整数 n 是否存在于给定的集合中。 输入描述: 有多组测试数据,第一行有一个整数 k,代表有 k 组测…...
生物研究新范式!AI语言模型在生物研究中的应用
–https://doi.org/10.1038/s41592-024-02354-y 留意更多内容,欢迎关注微信公众号:组学之心 Language models for biological research: a primer 研究团队及研究单位 James Zou–Department of Biomedical Data Science, Stanford University, Stan…...
python语言day08 属性装饰器和property函数 异常关键字 约束
属性装饰器: 三个装饰器实现对私有化属性_creat_time的get,set,del方法; 三个装饰器下的方法名都一样,通过message.creat_time的不同操作实现调用get,set,del方法。 __inti__: 创建并…...
day01JS-数据类型-01
1. 浏览器内核 通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)…...
MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)
专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
