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

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等),然后将这些图像作为Labelimage属性来显示。

关于Label组件的常用功能和几个简单介绍:

1. 显示文本

Label组件最基本的功能就是显示文本。你可以通过text参数来指定要显示的文本内容。

from tkinter import Tk, Label
​
root = Tk()
label = Label(root, text="Hello, Tkinter!")
label.pack()
root.mainloop()
2. 显示图像

为了显示图像,你需要先加载图像,然后将其作为Labelimage属性。注意,对于非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上绑定事件并不是常见的做法,因为它主要是为显示信息而设计的。对于需要用户交互的场景,使用ButtonCanvas等组件可能更合适。

实例代码展示:

# 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. 可变参数指的是“可变数量的参数”。分两种情况:

  1. *param(一个星号),将多个参数收集到一个“元组”对象中。

  2. **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的图形界面编程&#xff08;相关视频是哔站上的应该搜这个题目就能找到&#xff09;&#xff0c;文章还是很基础的&#xff0c;反正我是小白从0开始&#xff0c;主要的结构tinkter库、重要组件简介&#xff08;这个不用死记硬背 用的时候再说&#xff09;、Label&…...

Vue2和Vue3中的diff算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、diff算法是什么&#xff1f;二、vue2中的diff算法三、vue3中的diff算法总结 前言 一、diff算法是什么&#xff1f; diff算法很早就存在了&#xff0c;一开…...

springboot使用aop或Jackson进行数据脱敏

1.aop 启动类加EnableAspectJAutoProxy 自定义注解&#xff0c;在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截&#xff0c;这种我试了&#xff0c;拦截不住。猜测在mvc返…...

【Solidity】基础介绍

数据类型 值类型 值类型的变量在赋值或作为函数参数传递时会被复制。 布尔类型&#xff1a;bool整数类型&#xff1a; 无符号&#xff1a;uint8、uint16、…、uint256 (uint256 可简写为 uint)有符号&#xff1a;int8、int16、…、int256 (int256可简写为 int) 地址类型&…...

【SpringBoot3】双向实时通讯 websocket

文章目录 一、Websocket使用步骤二、示例1&#xff1a;继承抽象类 AbstractWebSocketHandler后端代码前端代码 三、示例2&#xff1a;使用注解ServerEndpoint后端代码前端代码 四、前端代码封装 一、Websocket使用步骤 在Spring Boot中使用WebSocket是一个常见的需求&#xff…...

搭建内网开发环境(一)|基于docker快速部署开发环境

引言 最近因需要搭建一套简易版的纯内网的开发环境&#xff0c;服务器采用 centos8.0&#xff0c;容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类&#xff1a; 软件安装和使用&#xff0c;这类是开发环境常用的软件部署和使用&#xff0c;涉…...

MATLAB R2023b配置Fortran编译器

MATLAB R2023b配置Fortran编译器 引言1. 安装Visual Studio 20192. 安装Intel API20243. 配置xml文件文件4. 设置环境变量5. MATLAB编译Fortran 引言 当我们需要用到MATLAB编译Fortran代码后进行调用计算时&#xff0c;整个配置流程较繁琐。下面以MATLAB R2023b为例&#xff0…...

2024新型数字政府综合解决方案(七)

新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术&#xff0c;创建了一个高度智能化和互联互通的政府服务平台&#xff0c;旨在全面提升行政效率、服务质量和透明度。该平台实现了跨部门的数据整合与实时共享&#xff0c;利用人工智能进行智能决策支持和…...

搭建高可用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分页内容截断问题

代码地址&#xff1a;https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案&#xff0c;但是在实践过程中&#xff0c;遇到的最大问题就是分页截断的问题&#xff1a;当页面元素超过一页A4纸的时候&#xff0c;连续的页面就会…...

14 地址映射

14 地址映射 1、地址划分2、相关函数2.1 ioremap/iounmap2.2 mmap地址映射 3、总结 1、地址划分 明确&#xff1a;在linux系统中,不管是应用程序还是驱动程序&#xff0c;都不允许直接访问外设的物理地址,要想访问必须将物理地址映射到用户虚拟地址或者内核虚拟地址&#xff0…...

Java Resilience4j-RateLimiter学习

一. 介绍 Resilience4j-RateLimiter 是 Resilience4j 中的一个限流模块&#xff0c;我们对 Resilience4j 的 CircuitBreaker、Retry 已经有了一定的了解&#xff0c;现在来学习 RateLimiter 限流器&#xff1b; 引入依赖&#xff1b; <dependency><groupId>io.g…...

Nginx--地址重写Rewrite

一、什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如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的配置装配参考&#xff1a; WebFlux是Spring 5.0框架推出的…...

ipad作为扩展屏的最简单方式

将iPad用作扩展屏幕有几种简单而有效的方法。以下是几种常见的方式&#xff1a; 1. Sidecar&#xff08;苹果官方功能&#xff09; 适用设备&#xff1a;iPad和Mac&#xff08;macOS Catalina及以上版本&#xff09;。功能&#xff1a;Sidecar 是苹果官方的功能&#xff0c;可…...

【卡码网Python基础课 17.判断集合成员】

目录 题目描述与分析一、集合二、集合的常用方法三、代码编写 题目描述与分析 题目描述&#xff1a; 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述&#xff1a; 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测…...

生物研究新范式!AI语言模型在生物研究中的应用

–https://doi.org/10.1038/s41592-024-02354-y 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 Language models for biological research: a primer 研究团队及研究单位 James Zou–Department of Biomedical Data Science, Stanford University, Stan…...

python语言day08 属性装饰器和property函数 异常关键字 约束

属性装饰器&#xff1a; 三个装饰器实现对私有化属性_creat_time的get&#xff0c;set&#xff0c;del方法&#xff1b; 三个装饰器下的方法名都一样&#xff0c;通过message.creat_time的不同操作实现调用get&#xff0c;set&#xff0c;del方法。 __inti__&#xff1a; 创建并…...

day01JS-数据类型-01

1. 浏览器内核 通常所谓的浏览器内核也就是浏览器所采用的渲染引擎&#xff0c;渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同&#xff0c;因此同一网页在不同的内核的浏览器里的渲染&#xff08;显示&#xff09;…...

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…...

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称DVCS&#xff09;&#xff0c;它以其高效、灵活和强大的功能&#xff0c;在现代软件开发中扮演着至关重要的角色。 git官网&#xff1a;Git (git-scm.com) 1.进入git官网 2…...

腾讯云AI代码助手 —— 编程新体验,智能编码新纪元

阅读导航 引言一、开发环境介绍1. 支持的编程语言2. 支持的集成开发环境&#xff08;IDE&#xff09; 二、腾讯云AI代码助手使用实例1. 开发环境配置2. 代码补全功能使用&#x1f4bb;自动生成单句代码&#x1f4bb;自动生成整个代码块 3. 技术对话3. 规范/修复错误代码4. 智能…...

使用 ESP32 和 TFT 屏幕显示实时天气信息 —— 基于 OpenWeatherMap API

实时监测环境数据是一个非常常见的应用场景&#xff0c;例如气象站、智能家居等。这篇博客将带你使用 ESP32 微控制器和一个 TFT 屏幕&#xff0c;实时显示当前城市的天气信息。通过 OpenWeatherMap API&#xff0c;我们能够获取诸如温度、天气情况以及经纬度等详细的天气数据&…...

高阶数据结构——B树

1. 常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff0…...

Vue2中watch与Vue3中watch对比和踩坑

上一节说到了 computed计算属性对比 &#xff0c;虽然计算属性在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法&#xff0c;来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…...

在Java程序中执行Linux命令

在Java中执行Linux命令通常涉及到使用Java的运行时类 (java.lang.Runtime) 或者 ProcessBuilder 类来启动一个外部进程 1. 使用 Runtime.exec() Runtime.exec() 方法可以用来执行一个外部程序。它返回一个 Process 对象&#xff0c;可以通过这个对象与外部程序交互&#xff0…...

微信小程序在不同移动设备上的差异导致原因

在写小程序的时候用了rpx自适应单位&#xff0c;但是还是出现了在不同机型上布局不统一的问题&#xff0c;在此记录一下在首页做一个输入框&#xff0c;在测试的时候&#xff0c;这个输入框在不同的机型上到处跑&#xff0c;后来排查了很久都不知道为什么会这样 解决办法是后 …...

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现&#xff0c;无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例&#xff0c;在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台&#xff1a;曙光超算互联网平台SCNet GPU/DCU&#xff1a;异构加速卡AI 显存64GB PCIE&#…...

报错:java: javacTask: 源发行版 8 需要目标发行版 1.8

程序报错&#xff1a; Executing pre-compile tasks... Loading Ant configuration... Running Ant tasks... Running before tasks Checking sources Copying resources... [gulimail-coupon] Copying resources... [gulimail-common] Parsing java… [gulimail-common] java…...

【数据结构篇】~单链表(附源码)

【数据结构篇】~链表 链表前言链表的实现1.头文件2.源文件 链表前言 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1、链式机构在逻辑上是连续的&#xff0c;在物理结构上不一定连续​ 2、结点一般是从…...