Python9 Tkinter创建GUI

1.Tkinter简单介绍

Tkinter是Python的标准GUI(图形用户界面)库,提供一种简单的方式来创建窗口程序。Tkinter封装了访问Tk GUI工具包的接口,Tk是一个跨平台的GUI开发库,广泛用于创建图形界面。

使用Tkinter,开发者可以快速地创建如窗口、对话框、按钮、菜单、文本框等GUI元素,并定义这些元素的行为,处理用户的交互行为。它广泛用于以下工作:

  1. 快速原型开发:由于Python的简单性,加上Tkinter的易用性,它非常适合用于快速开发桌面应用的原型。

  2. 教育和入门级项目:对于学习编程和GUI开发的初学者,Tkinter提供了一个较为容易的学习路径。

  3. 内部工具和独立应用:对于小型业务和实验室,Tkinter是快速开发专用工具或简单应用程序的理想选择。

  4. 数据可视化和简单的交互式工具:Tkinter可以用来开发需要图形用户界面的数据分析工具。

尽管Tkinter在功能和现代性方面可能不如其他更先进的GUI框架(如 PyQt 或 Electron),它仍然是入门级和中小型应用的一个非常可靠的选择,因为它的轻量级、简单易学,并且不需要安装额外的库就可以使用。

2.Tkinter的简单使用

① 创建一个Tk根目录
# 创建第一个tkinter程序
from tkinter import *  #  # 从tkinter库导入所有模块
root=Tk()  # 创建一个Tk根窗口,用来容纳整个GUI应用
root.mainloop()  # 启动应用的事件循环,等待用户交互

图片

② 添加GUI标题
# Tk类解读
from tkinter import *
root=Tk()
root.wm_title("窗口标题为:Python Tkinter")
root.mainloop()

图片

③ 添加标签
# 组件--label标签
from tkinter import *
# 创建一个TK实例root
root=Tk()
root.wm_title('这是一个tkinter示例')
w1=Label(root,text='正在学习Tkinter',background='red',underline=True)  # 创建一个Label实例
w1.pack()  # 找个合适的位置进行放置
root.mainloop()

图片

④ 添加多个标签
from tkinter import *
#首先、创建一个tkinter实例
root=Tk()
root.wm_title('创建多个标签Label')
w1=Label(root,text='我是第一个Label',background='yellow')
w2=Label(root,text='我是第二个Label',background='red')
w3=Label(root,text='我是第三个Label',background='green')
w1.pack()
w2.pack()
w3.pack()
root.mainloop()

图片

⑤ 添加按钮组件
# 组件--按钮
from tkinter import *
def create_label():  # 定义一个名为create_label的函数,当按钮被点击时,这个函数将被调用
    global root  # 通过使用global关键字声明root,确保函数内部可以访问到在外部定义的root变量
    w=Label(root,text='我是一个Label')  # 在根窗口root中创建一个新的Label标签,文本内容为“我是一个Label”
    w.pack()  # 使用pack()几何管理器来自动调整标签的位置和大小,并使其在窗口中显示
root=Tk()  # 创建Tk实例
# Button是Tkinter中用于创建按钮的组件,root参数指定了按钮将被放置在哪个容器中,在这里是根窗口root;text='点击我添加一个label'设置按钮上显示的文本;command=create_label参数指定了当按钮被点击时应该执行的函数,这里绑定到了前面定义的create_label函数
button=Button(root,text='点击我添加一个label',command=create_label)
button.pack()  # 自动调整其位置和大小
root.mainloop()  # 启动Tkinter的事件监听循环,这使得窗口能够保持开启状态,并响应用户的操作,比如按钮点击事件。

图片

⑥ 创建两个按钮并设置属性
# 设置button的属性
from tkinter import *
#创建一个tkinter实例
root=Tk()

button1=Button(root,text='按钮1') 
button1['width']=20
button1['height']=2
button1['background']='yellow'
button1.pack()

button2=Button(root,text='按钮2')
button2['width']=30
button2['height']=1
button2['background']='green'
button2.pack()

root.mainloop()

图片

⑦ 设置GUI布局

下面的示例代码展示的是pack布局管理器的基本用法,展示如何通过不同的参数调整组件的布局和扩展方式。pack是Tkinter中三种主要的几何管理器之一,它可以按照指定的方向顺序排列窗口部件。

# 布局介绍
# pack布局
from tkinter import *
root=Tk()
# 创建一个按钮,文本为"A",side=LEFT指定按钮在其容器中靠左对齐,expand=YES:允许按钮在用户调整窗口大小时水平扩展,fill=Y:在垂直方向上填满整个分配给它的空间
Button(root,text='A').pack(side=LEFT,expand=YES,fill=Y)
# 创建一个按钮,文本为"B",side=TOP:指定按钮位于其容器的顶部,expand=YES:允许按钮在用户调整窗口大小时水平和垂直扩展,fill=BOTH:让按钮填满在水平和垂直方向上分配给它的所有空间
Button(root,text='B').pack(side=TOP,expand=YES,fill=BOTH)
# 创建一个按钮,文本为"C",side=RIGHT:指定按钮在其容器中靠右对齐,fill=NONE:按钮不填充额外空间,anchor=NE:按钮的锚点位于北东(右上角)
Button(root,text='C').pack(side=RIGHT,fill=NONE,anchor=NE)
root.mainloop()

图片

⑧ grid布局管理器创建简单的登录界面
#grid布局
from tkinter import*
root=Tk()

# 在第一行第一列创建一个标签(Label)组件,显示文本“账号”,sticky=W参数使得标签靠近网格单元的西部(左侧)
Label(root,text='账号').grid(row=0,sticky=W)
# 在第一行第二列创建一个输入框(Entry),用于输入账号,sticky=E使得输入框靠近网格单元的东部(右侧)
Entry(root).grid(row=0,column=1,sticky=E)

# 与上面同样的方法
Label(root,text='密码').grid(row=1,sticky=W)
Entry(root).grid(row=1,column=1,sticky=E)

# 在第三行第二列创建一个按钮,显示文本“登录”。sticky=W参数使按钮靠左对齐
Button(root,text='登录').grid(row=2,column=1,sticky=W)
# 在同一行同一列创建另一个按钮,显示文本“注册”。sticky=E参数使按钮靠右对齐
Button(root,text='注册').grid(row=2,column=1,sticky=E)
root.mainloop()

图片


以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

++++++局部变量、全局变量及变量的存储类别++++====+++指针+++

局部变量、全局变量及变量的存储类别 局部变量与全局变量的基本概念 局部变量:在函数内部定义的变量称为局部变量,也称为内部变量。它们只在定义它们的函数内部有效,即只有在这个函数被调用时,局部变量才会被分配内存空间&#x…

Java学习【深入解读File类:从基础到高级的完整指南】

Java学习【深入解读File类:从基础到高级的完整指南】 ⭐File的概述和构造方法⭐File常见的成员方法🌙构造方法🌙length()🌙getAbsoluteFile()和getPath()🌙getName()和lastModified() ⭐文件的创建和删除⭐获取并遍历 …

从 0 打造私有知识库 RAG Benchmark 完整实践

背景介绍 最近从 0 构建了一个大模型知识库 RAG 服务的自动化 Benchmark 评估服务,可以基于私有知识库对 RAG 服务进行批量自动化测试与评估。本文是对这个过程的详细记录。 本文实际构建的是医疗行业知识库,基于高质量的医学指南和专家共识进行构建。…

8K Stars!Text2SQL还不够?试试更精准的RAG2SQL开源工具

▼618钜惠专场直播,点击预约按钮免费预约。 SQL 是查询数据库的关键,但如何高效地构建满足个人需求的 SQL 语句呢?随着 AI 大模型的进步,我们现在已经拥有了 Text2SQL 的技术,这一技术已被多款产品广泛应用。 今天&…

考研数学|做完《660》,做《880》还是吃力,怎么办?

880吃力说明基础还是不太扎实,建议配合知能行再刷880。 强化之前做660,然后在强化的时候再做880。 660整体难度属于基础阶段到强化阶段。而且是选填部分的题目,所以还是要做一些其他题 然后说一下推荐的习题册:基础不好先做1800、…

如何学习 Java 中的 Socket 编程,进行网络通信

Socket编程是网络编程的核心技术之一,它使得不同主机之间可以进行数据通信。Java提供了丰富的网络编程API,使得编写网络应用程序变得相对简单和直观。本文将详细讲解如何学习Java中的Socket编程,并通过示例代码展示如何实现网络通信。 一、S…

船舶能源新纪元:智能管理引领绿色航运潮流

在蓝色的大海上,无数船只乘风破浪,为全球的贸易和文化交流贡献着力量。然而,随着环保意识的提升和可持续发展的要求,船舶的能源消耗和排放问题逐渐成为了人们关注的焦点。在这个关键时刻,船舶能源管理系统应运而生&…

智能合约开发的过程

智能合约是一种运行在区块链上的程序,可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点,因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流…

西门子学习笔记12 - BYTE-REAL互相转化

这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组

通过编辑器工具改变Inspector锁定状态

是在看一系列视频的时候,看到的,感觉挺有用,就记录下来。 就是这个小锁的按钮,后续可以通过快捷键,快速锁定和解锁。代码里没有加入快捷键控制,有需要用到的可以自己加一下,比较简单 using Uni…

前端上传minio

参考【GitCode - 全球开发者的开源社区,开源代码托管平台】 注意事项:nodejs服务,文件扩展名为mjs,版本号8.0,引入的时候 import * as Minio from minio import Minio as * from minio// 实例化对象存储服务的MinIO客户端 // p…

c语言字符串函数详解(全)

字符串函数 1.strlen函数 求字符串长度的 //求字符串长度 int my_strlen(char* str) {int count 0;while (*str ! \0){count;*str;}return count; } int main() {char arr[] "abcdef";int red my_strlen(arr);printf("%d\n", red);return 0; } 2. st…

【MySQL】(基础篇十二) —— 子查询

分组数据 本文介绍什么是子查询以及如何使用它们。 SQL允许我们创建子查询(subquery),即嵌套在其他查询中的查询。这样可以实现更复杂的查询,理解这个概念的最好方法是考察几个例子。 利用子查询进行过滤 需求:查询…

一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

案发现场:混沌初现 2024年6月10日,本应是平静的一天。但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响。北京可用区服务器节点突然出现大量 “not ready” 告警,紧接着,系统自动触发 004 节点重启&…

重学java 75.JDK新特性 ① Lambda表达式

你所做的事情,也许暂时看不到成果,你不是没有成长,而是在扎根 —— 24.6.19 一、函数式编程思想和Lambda表达式定义格式 1.面向对象思想:是Java的核心编程思想 强调的是找对象,帮我们做事儿 比如:去北京 -> 强调的是怎么去,火车,高铁,飞机…

为什么人们对即将推出的 Go 1.23 迭代器感到愤怒

原文:gingerBill - 2024.06.17 TL;DR 它让 Go 变得太“函数式”,而不再是不折不扣的命令式语言。 最近,我在 Twitter 上看到一篇帖子,展示了 Go 1.23(2024 年 8 月)即将推出的 Go 迭代器设计。据我所知&a…

35 Debian如何配置Postfix+Dovecot

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置Postfix+Dovecot 《傅老师Debian知识库系列之35》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Deb…

网安人必备!开源网络安全工具TOP 10(附下载地址)

工欲善其事,必先利其器。对于广大的网络安全从业者,以及未来想要从事网络安全的人来说,选择并善用合适的网络安全工具,能有效提升工作效率。 开源网络安全工具之所以能够在众多安全解决方案中脱颖而出,不仅是因为它们…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制,是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数,基数为 X 的进位计数制称为 X 进制,表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1:当…

小林图解系统-二.硬件结构 2.4CPU缓存一致性

CPU Cache的数据写入 CPU和内存的访问性能越差越大,于是在CPU内部嵌入CPU Cache(高速缓存)。 CPU Cache由Cache Line组成,Cache Line由头标志Tag数据块Data Block组成。 如果数据写入Cache,内存和Cache相对应的数据将不同,需要…