Python -- GUI图形界面编程—GUI编程实例 博主也在持续学习中[ 持续更新中!!! 欢迎白嫖 也求粉啊啊啊~ ]

news2024/9/21 21:41:16

本文介绍了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 = master
        self.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 = master
        self.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 = master
        self.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()  # 事件循环

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

诊断知识:DTC Status中pending位的使用

文章目录 前言OCC6的定义pending位的定义pending位的使用总结 前言 上一篇文章介绍了ConfirmedDTCLimit的使用&#xff0c;诊断知识&#xff1a;ConfirmedDTCLimit的使用&#xff0c;后面发现理解还是有问题的&#xff0c;其实原来的图画的没有问题&#xff0c;之前对OCC6理解…

【业余玩儿AI】Day 1

【业余玩儿AI】Day 1 实际是昨天的事儿了&#xff0c;记录以下 魔法 不管三七二十一&#xff0c;重新启用魔法&#xff0c;没有魔法这些事情肯定是不行滴 种子任务 把收藏了两个星期的短视频都看了一遍&#xff0c;挑了个种子任务&#xff0c;《本地部署Llama3.1》&#x…

【Web IDE】WebContainer容器在浏览器中启动运行nodejs并使用vite启动项目

参考了文章WebContainer/api 基础&#xff08;Web IDE 技术探索 一&#xff09; 在浏览器中运行vite的vue3项目 示例站点 最终效果 主要流程 加载WebContainer》加载代码压缩包>解压代码压缩包》生成文件树》挂载文件树》pnpm安装依赖》启动项目 代码 <script setup…

Unity动画模块 之 3D模型导入基础设置Model页签

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 创建模型&#xff1a;在 Unity 外部创建模型 - Unity 手册 导入模型&#xff1a;将模型导入 Unity - Unity 手册 1.…

算法的学习笔记—二叉树的镜像(牛客JZ27)

&#x1f600;前言 在二叉树相关的问题中&#xff0c;镜像操作是一个非常经典且常见的题目。本文将通过一道具体的题目&#xff0c;详细讲解如何将一棵二叉树转换为它的镜像&#xff0c;并提供实现该操作的Java代码示例。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 …

【LVGL9学习笔记-2.添加百问网demo至工程模板】

添加百问网demo至工程模板 上一节使用codeBlocks运行了LVGL ,以此作为模板&#xff0c;将百问网的一些demo添加至该工程中 拷贝文件与配置文件至该目录下 打开工程包含文件 –>add files recusively –>add files 编译一次出现如下情况&#xff08;后面学到了再做解决…

[机器学习]全景指南:从基础概念到实战流程的全面解析

文章目录 1.引言1.1机器学习的重要性1.2机器学习的应用范围1.3本文的内容结构 2. 机器学习的基本概念与分类2.1 机器学习的定义2.2 机器学习的分类 4. 强化学习&#xff08;Reinforcement Learning&#xff09; 3. 机器学习的工作流程3.1 数据收集与准备1. 数据源与类型2. 数据…

Windows SDK 消息类型详解

消息结构体 如下是消息的结构体 typedef struct tagMSG {HWND hwnd; // 消息所属窗口的句柄UINT message; // 消息的标识符&#xff0c;表示什么类型的消息&#xff0c;如WM_PAINT、WM_QUIT等。WPARAM wParam; // 与消息相关的附加信息。具体含义取决于消息的类型。L…

模型驱动设计(MODEL-DRIVEN DESIGN)

前言 为了保证软件实现得简洁并且与模型保持一致&#xff0c;不管实际情况如何复杂&#xff0c;必须运用建模和设计的最佳实践。 本书中的软件设计风格主要遵循"职责驱动设计"的原则&#xff0c;这个原则是Wirfs-Brock等人在1990年中提出的&#xff0c;并在2003年进…

Nios ll软核处理器

1.打开软件 &#xff08;1&#xff09;quartus软件内部打开 &#xff08;2&#xff09;创建软件快捷方式 软件安装目录文件夹下&#xff0c;nois2eds -> bin -> eclipse-nios2.exe &#xff0c;创建快捷方式&#xff0c;放到桌面&#xff0c;双击打开软件。 2.Workspa…

CSC2121 半桥驱动芯片

CSC2121 X系列是一款高性价比的半桥架构的栅极驱动专用电路&#xff0c;用于大功率MOS管、IGBT管栅极驱动。CSC2121内部集成了逻辑信号处理电路、死区时间控制电路、欠压保护电路、电平位移电路、脉冲滤波电路及输出驱动电路&#xff0c;CSC2121X专用于无刷电机控制器中驱动电路…

韩国服务器的性能如何提升

韩国服务器的性能可以通过硬件升级、网络优化、缓存优化和软件优化来提升。具体方法如下&#xff0c;rak小编为您整理发布韩国服务器的性能如何提升。 1. 硬件升级 CPU升级&#xff1a;选择高性能的多核处理器&#xff0c;可以显著提升计算速度和响应能力。 内存升级&#xff1…

9.内置函数

目录 1.日期函数 案例1&#xff1a; 创建一张表&#xff0c;记录生日 案例2&#xff1a; 创建一个留言表 2.字符串函数 charset案例1->返回字符串字符集 concat案例连接字符串 instr案例 ​编辑 ucase案例 lcase案例 left案例 length案例 replace案例 strcmp…

13 定时器

13 定时器 1、定时1.1 硬件定时器的特性1.2 硬件定时器对应的中断处理函数所作的工作(了解)1.3 linux内核中跟时间相关的三个概念&#xff1a; 2、延时2.1.延时定义2.2 忙等待2.3.休眠等待2.4 等待队列机制2.4.1 介绍2.4.2 结论2.4.3 进程休眠和唤醒的编程步骤方法 1方法 2 3、…

Epic Games 商店面向欧盟 iPhone 用户上线

Epic Games Store 终于在欧盟推出&#xff0c;为玩家提供了不通过 App Store 就能在 iPhone上访问游戏的途径。在经历了漫长而昂贵的关于支付和竞争对手应用程序店面的法律战&#xff0c;以及公证方面的麻烦之后&#xff0c;Epic Games 成功地为App Store 带来了一个数字店面。…

IO多路复用中的水平触发和边缘触发、Java NIO中的水平触发举例

基础原理 水平触发&#xff08;Level-triggered&#xff0c;也被称为条件触发&#xff09;LT&#xff1a;主要满足条件&#xff0c;就触发事件。 边缘触发&#xff08;Edge-triggered&#xff09;ET&#xff1a;当状态变化时触发。 使用脉冲信号来说明LT和ET&#xff1a;LT指…

Nginx--地址重写Rewrite

一、什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id123 使用U…

Linux命令之一

Linux命令之一 帮助类命令磁盘管理文件管理系统设置开关服务命令临时开关服务命令永久开关服务命令 压缩/解压网络通讯网络访问管道和重定向搜索命令grepfind 磁盘分区类命令 Linux命令速查平台 帮助类命令 语法 man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助…

【c++】深入理解别名机制--引用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、引用的概念和定义 二、引用的特性 三、引用的实用性 1.引用传参 2.引用做返回值 2.1 引用做返回值的作用 2.2 引用坍缩问题、悬挂引用问…

ThreadPoolExecutor详解

恰逢经济下行&#xff0c;鄙人工作、生活日趋艰难&#xff0c;原本美好的愿望&#xff0c;如今只能成为奢望。不知如何是好的我&#xff0c;只能精研近几年来因浮躁而荒废的知识。今天就想跟大家聊一个对我来讲看似熟悉实则陌生的工具——ThreadPoolExecutor。熟悉是因为在我负…