【python】tkinter GUI编程经典用法,Label标签组件应用实战详解

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:python图形化GUI编程tkinter精讲
景天的主页:景天科技苑

文章目录

  • 1.tkinter 主窗口
    • 测试 tkinter 主窗口位置和大小的设置
  • 2.python GUI 编程整体描述
  • 3.tkinter常用组件汇总列表
  • 4.GUI 应用程序类的经典写法
    • 标准的面向对象 GUI 程序类的写法
  • 5.Label 组件
    • Label(标签)的用法实战

1.tkinter 主窗口

主窗口位置和大小
通过 geometry(‘wxh±x±y’)进行设置。w 为宽度,h 为高度。+x 表示距屏幕左边的距离;
-x 表示距屏幕右边的距离;+y 表示距屏幕上边的距离;-y 表示距屏幕下边的距离。单位是像素
前两个参数表示的是创建窗口的大小,而且一定要用x(小写的x表示),否则会报错:TclError: bad geometry specifier “400*300+100+100”,初学者一定要注意

测试 tkinter 主窗口位置和大小的设置

from tkinter import *
root = Tk()
#title设置窗口的主题
root.title("测试主窗口的位置和大小")
#geometry(‘wxh±x±y’)进行设置窗口大小和位置
root.geometry("500x400+100+200") #宽度 500,高度 400;距屏幕左边 100,距屏幕上边 200 ,注意这里是小写的x,不能写*,否则会报错

root.mainloop()

运行显示
在这里插入图片描述

2.python GUI 编程整体描述

图形用户界面是由一个个组件组成,就像小孩“搭积木”一样最终组成了整个界面。有
的组件还能在里面再放置其他组件,我们称为“容器”。Tkinter 的 GUI 组件关系图如下:
在这里插入图片描述

根据上图所示,我们依次讲解这些类的基本作用。
·Misc 和 Wm:
Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
·Misc:它是所有组件的根父类。
·Wm:它主要提供了一些与窗口管理器通信的功能函数。

·Tk
Misc 和 Wm 派生出子类 Tk,它代表应用程序的主窗口。一般应用程序都需要直接或间接
使用 Tk。
·Pack、Place、Grid
Pack、Place、Grid 是布局管理器。布局管理器管理组件的:大小、位置。通过布局管
理器可以将容器中的组件实现合理的排布。
·BaseWidget
BaseWidget 是所有组件的父类
·Widget
Widget 是所有组件类的父类。Widget 一共有四个父类:BaseWidget、Pack、Grid、Place。
意味着,所有 GUI 组件同时具备这四个父类的属性和方法。
在这里插入图片描述

【注】想观察类的层次结构可以在类定义处的类名上单击右键,选择 Diagram–>show
Diagram。
查看继承关系
在这里插入图片描述
在这里插入图片描述

3.tkinter常用组件汇总列表

在这里插入图片描述
在这里插入图片描述

4.GUI 应用程序类的经典写法

本节程序也是 GUI 应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的
组织代码。
通过类 Application 组织整个 GUI 程序,类 Application 继承了 Frame 及通过继承拥有
了父类的特性。
通过构造函数__init__()初始化窗口中的对象,通过 createWidgets()方法
创建窗口中的对象。
Frame 框架是一个 tkinter 组件,表示一个矩形的区域。Frame 一般作为容器使用,可
以放置其他组件,从而实现复杂的布局。

可以参照官方文档里面的面向对象写法
在这里插入图片描述

标准的面向对象 GUI 程序类的写法

"""测试一个经典的 GUI 程序的写法,使用面向对象的方式"""
from tkinter import *
from tkinter import messagebox

#自定义类,继承Frame
class Application(Frame):
    """一个经典的 GUI 程序的类的写法"""
    #构造方法,可以调用绑定方法
    def __init__(self, master=None):
        #调用父类构造方法
        super().__init__(master)  # super()代表的是父类的定义,而不是父类对象
        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
        # 创建一个退出按钮,command表示处理逻辑
        self.btnQuit = Button(self, text="退出", command=root.destroy)
        self.btnQuit.pack()


    def songhua(self):
        # 第一个参数是标题,第二个参数是文本内容
        messagebox.showinfo("送花", "送你 99 朵玫瑰花")


if __name__ == '__main__':
    root = Tk()
    root.geometry("500x200+200+300")
    root.title("一个经典的 GUI 程序类的测试")
    #需要传参,master就是传的对象
    app = Application(master=root)
    root.mainloop()

运行
在这里插入图片描述

点击送花
在这里插入图片描述

点击退出,就退出程序

5.Label 组件

Label(标签)主要用于显示文本信息,也可以显示图像,是不可编辑的。

Label(标签)有这样一些常见属性:

  1. width,height:
    用于指定区域大小,如果显示是文本,则以单个英文字符大小为单位(一个汉字宽度占
    2 个字符位置,高度和英文字符一样);如果显示是图像,则以像素为单位。默认值是
    根据具体显示的内容动态调整。

  2. font
    指定字体和字体大小,如:font = (font_name,size)

  3. image:
    显示在 Label 上的图像,目前 tkinter 支持 PGM,PPM,GIF,PNG 格式。
    在这里插入图片描述

  4. fg 和 bg
    fg(foreground):前景色、bg(background):背景色

  5. justify
    针对多行文字的对齐,可设置 justify 属性,可选值"left", “center” or “right”
    在这里插入图片描述

6.relief
指定标签周围装饰边框的外观,默认值是’flat’,
可选项有"raised", “sunken”, “flat”, “ridge”, “solid”, “groove”
在这里插入图片描述

各个参数显示如下
在这里插入图片描述

7.text
指定显示在控件内的文本
8.state
可以设为’normal’或’disabled’,以便控制‘禁用’状态标志位

Label(标签)的用法实战

"""测试 Label 组件的基本用法,使用面向对象的方式"""
from tkinter import *
class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master) # super()代表的是父类的定义,而不是父类对象
        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["text"]="ccc"
        #也可以用config设置属性
        self.label01.config(fg="red",bg="green")
        self.label01.pack()
        self.label02 = Label(self,text="景天", width=10,height=2,bg="blue", fg="white",font=("楷体", 30))
        self.label02.pack()
        # 显示图像
        global photo # 把 photo 声明成全局变量。如果是局部变量,本方法执行完毕后,图像对象销毁,窗口显示不出图像。
        photo = PhotoImage(file="imgs/数据分析.png")
        self.label03 = Label(self, width=500,height=100,image=photo)
        self.label03.pack()
        #borderwidth可简写为'bd',设置标签的边框宽度(单位:像素)
        self.label04 = Label(self, text="景天科技苑\n 百战程序员\n 景天好帅,就是做饭不行",borderwidth = 5, relief = "groove", justify = "right")
        self.label04.pack()


if __name__ == '__main__':
    root = Tk()
    root.geometry("500x360+200+300")
    root.title("景天科技苑")
    app = Application(master=root)
    root.mainloop()

运行结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据,而PDF文件则是一种通用的文档格式,便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

监控摄像机接入GB28181平台如何获取监控视频

各种型号监控摄像头或硬盘录像机接入 GB28181平台配置过程非常简单明了,但有些细节需要注意,避免走弯路。 1、基本要求 (1)网络要求 总的来说,只要监控设备和GB28181平台的网络是连通的,设备可以主动访问…

Xcode 安装17.5 simulator 总是失败

升级到xcode15.4后需要安装ios17.5模拟器 但是在下载过程中会遇到报错 : The network connection is lost 解决方案: 先将模拟器下载到本地 Xcode 安装17.5 simulator 下载地址: Sign In - Applhttps://developer.apple.com/download/all/?qXcode 下…

OpenStack云平台管理

OpenStack云平台管理 文章目录 OpenStack云平台管理资源列表基础环境一、部署Openstack二、创建网络和路由2.1、删除默认的网络2.2、创建网络和路由2.2.1、创建外部网络2.2.2、创建内部网络 2.3、创建路由 三、创建实例3.1、配置实例3.2、配置NAT转换 四、绑定浮动IP地址五、添…

Paper速读-[Visual Prompt Multi-Modal Tracking]-Dlut.edu-CVPR2023

文章目录 简介关于具体的思路问题描述算法细节 实验结果模型的潜力模型结果 论文链接:Visual Prompt Multi-Modal Tracking 开源代码:Official implementation of ViPT 简介 这篇文章说了个什么事情呢,来咱们先看简单的介绍图 简单来说&am…

PVE管理虚拟机节点

今天使用PVE命令安装虚拟机。 ‍ 查看所有虚拟机 qm list 查看所有虚拟机 ​​ 创建虚拟机 qm create 创建虚拟机 qm create 106 --name vm-test --memory 2048 --net0 virtio,bridgevmbr0基础配置 这条命令会创建一个 VM,ID 为 106​,名称为 myvm​…

MySQL将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示

将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示 idname1苹果Apple72Plum6李子3Pineapple8菠萝4Mango5芒果5龙吐珠5Buddha’sHand6Olive9橄榄7Raspberry4树莓8Apricot5杏子9Grapefruit9柚子10火龙果Dragonfruit911倒挂金钟Hanging6LobsterClaw12巨峰葡萄Co…

【STM32HAL库学习】定时器功能、时钟以及各种模式理解

一、文章目的 记录自己从学习了定时器理论->代码实现使用定时->查询数据手册,加深了对定时器的理解以及该过程遇到了的一些不清楚的知识。 上图为参考手册里通用定时器框图,关于定时器各种情况的工作都在上面了,在理论学习和实际应用后…

Unity 编辑器扩展 一键替换指定物体下的所有材质球

先看效果 实现方案 1:创建几个用于测试的Cube 2:创建一个脚本 3:编写脚本内容 主要是这部分的逻辑 附上完整代码 using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine;public class Tool {[MenuItem(…

20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通

无语 前置: VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一: 前期决定要写demo时候,单独了解了,后端引入Netty-SocketIO注意事项,详见我先头写的博客 前…

【因果推断python】24_倾向得分2

目录 倾向加权 倾向得分估计 倾向加权 好的,我们得到了倾向得分。怎么办?就像我说过的,我们需要做的就是以此为条件。例如,我们可以运行一个线性回归,它仅以倾向得分为条件,而不是所有的 X。现在&#xff…

什么是虚拟局域网?快解析有哪些的虚拟化应用功能?

什么是虚拟局域网?从字面上理解就是不是真实存在的局域网。虚拟局域网是将网络用户和设备集中在一起,从而可以对不同地域和商业的需要有一定的支持性。虚拟局域网有它的优点,在使用过程中可以为企业提供更安全、更稳定、更灵活的服务保障体系…

详细分析Mysql中的JSON_OBJECT() 基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于基本的命令行以及优化推荐阅读: 数据库中增删改常用语法语句(全)Mysql优化高级篇(全)命令行登录Mysql的详细讲解 1. 基本知识 JSON_OBJECT() 是 MySQL 中用于生成 JSON 对象…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview,读取到文件的File对象,用File去做文件展示,这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中(上zip已包…

html--party网页制作

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>fo安方party</title><style>body {f…

【PythonCode】力扣Leetcode21~25题Python版

【PythonCode】力扣Leetcode21~25题Python版 前言 力扣Leetcode是一个集学习、刷题、竞赛等功能于一体的编程学习平台&#xff0c;很多计算机相关专业的学生、编程自学者、IT从业者在上面学习和刷题。 在Leetcode上刷题&#xff0c;可以选择各种主流的编程语言&#xff0c;如C…

【CS.CN】优化HTTP传输:揭示Transfer-Encoding: chunked的奥秘与应用

文章目录 0 序言0.1 由来0.2 使用场景 1 Transfer-Encoding: chunked的机制2 语法 && 通过设置Transfer-Encoding: chunked优化性能3 总结References 0 序言 0.1 由来 Transfer-Encoding头部字段在HTTP/1.1中被引入&#xff0c;用于指示数据传输过程中使用的编码方式…

OlSoul系统调校程序v2024.06.05

软件介绍 OlSoul是一款能够适配用于Win各个系统的系统调校软件&#xff0c;OlSoul内置有众多调校功能可以直接使用&#xff0c;如有启用无线网络功能、启用打印机功能、系统快速休眠与休眠开关、快捷方式小箭头去除功能等&#xff0c;具体的调校功能多达几十项&#xff0c;可自…

vsCode双击文件才能打开文件,单击文件只能预览?

解决&#xff1a; 1、打开设置 2、搜索workbench.editor.enablePreview 3、更改为不勾选状态 4、关闭设置 效果&#xff1a; 现在单击一个文件时&#xff0c;将会在编辑器中直接打开&#xff0c;而非是预览状态。

51单片机-实机演示(LED点阵)

目录 前言: 一.线位置 二.扩展 三.总结 前言: 这是一篇关于51单片机实机LED点阵的插线图和代码说明.另外还有一篇我写的仿真的连接在这:http://t.csdnimg.cn/ZNLCl,欢迎大家的点赞,评论,关注. 一.线位置 接线实机图. 引脚位置注意: 1. *-* P00->RE8 P01->RE7 …