Python 图形用户界面详解(GUI,Tkinter)

文章目录

  • 1 概述
    • 1.1 TK:窗口
    • 1.2 官方文档
  • 2 组件
    • 2.1 Label:标签
    • 2.2 Button:按钮
    • 2.3 Entry:输入
    • 2.4 Text:文本
    • 2.5 Radiobutton:单选框
    • 2.6 Checkbutton:复选框
    • 2.7 Canvas:画布
    • 2.10 Menu:菜单
  • 3 布局管理器
    • 3.1 pack:包
    • 3.2 grid:网格
    • 3.3 place:位置

1 概述

1.1 TK:窗口

import tkinter# 定义窗口对象
window = tkinter.Tk()# 设置窗口属性
window.title('我的第一个 GUI 程序')  # 标题
window.geometry('300x100+300+200')  # 位置及大小
# 格式:'wxh +-x +-y',其中
# wxh:表示 宽x高(字母 xyz 的 x)
#  +x:表示距屏幕左边的距离;-x 表示距屏幕右边的距离
#  +y: 表示距屏幕上边的距离;-y 表示距屏幕下边的距离# 主循环:窗口一直存在(除非被关闭)
window.mainloop()

1.2 官方文档

  • 官方文档:https://docs.python.org/3.9/library/tk.html

2 组件

2.1 Label:标签

菜单结构:
在这里插入图片描述

from tkinter import *class Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="标签1", width=10, height=2, bg="black", fg="white")self.label01.pack()self.label02 = Label(self, text="标签2", width=10, height=2, bg="blue", fg="white", font=("黑体", 20))self.label02.pack()# 显示文本self.label03 = Label(self, text="段落1\n段落段落2\n段落段落段落3", borderwidth=1, relief="solid", justify="right")self.label03.pack()# 显示图片global photophoto = PhotoImage(file="images/1.gif")  # 暂支持的图片格式:png、gifself.label04 = Label(self, image=photo)self.label04.pack()if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x300+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

2.2 Button:按钮

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""# 常规按钮self.btn01 = Button(self, text="登录", command=self.login)self.btn01.pack()self.btn02 = Button(self, text="登录2", command=self.login)self.btn02.config(state="disabled")  # 禁止登录self.btn02.pack()# 图片按钮global photophoto = PhotoImage(file="images/1.gif")self.btn03 = Button(self, image=photo, command=self.login)self.btn03.pack()def login(self):messagebox.showinfo("提示", "登录成功!")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

2.3 Entry:输入

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="用户名")self.label01.pack()user_name = StringVar()self.entry01 = Entry(self, textvariable=user_name)self.entry01.pack()self.label02 = Label(self, text="密码")self.label02.pack()password = StringVar()self.entry02 = Entry(self, textvariable=password, show="*")self.entry02.pack()Button(self, text="登录", command=self.login).pack()def login(self):user_name = self.entry01.get()password = self.entry02.get()if user_name == 'admin' and password == '123456':messagebox.showinfo("提示", "登录成功!")else:messagebox.showinfo("提示", "登录失败,请检查用户名或密码!")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

2.4 Text:文本

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.text01 = Text(self, width=40, height=10, bg="gray")self.text01.pack()# 插入文本,格式:横坐标.纵坐标self.text01.insert(1.0, 'aaaaaaaaaaaaaaaa\nbbbbbbbbbbbbb')self.text01.insert(2.3, 'cccccccccccccccc\neeeeeeeeeeeee')Button(self, text="重复插入文本", command=self.insert_text).pack(side="left")def insert_text(self):self.text01.insert(INSERT, '鼠标光标处插入')self.text01.insert(END, '文本最后处插入')if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

2.5 Radiobutton:单选框

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.default = StringVar()self.default.set("F")rb1 = Radiobutton(self, text="男性", value="M", variable=self.default)rb2 = Radiobutton(self, text="女性", value="F", variable=self.default)rb1.pack(side="left")rb2.pack(side="left")Button(self, text="确定", command=self.confirm).pack()def confirm(self):messagebox.showinfo("提示", "选择的性别的是:" + self.default.get())if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

在这里插入图片描述

2.6 Checkbutton:复选框

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.code = IntVar()self.video = IntVar()print(self.code.get())  # 整数默认值是 0# onvalue=1, offvalue=0 表示:选中=1,未选中=0cb1 = Checkbutton(self, text="敲代码", variable=self.code, onvalue=1, offvalue=0)cb2 = Checkbutton(self, text="看视频", variable=self.video, onvalue=1, offvalue=0)cb1.pack(side="left")cb2.pack(side="left")Button(self, text="确定", command=self.confirm).pack()def confirm(self):if self.code.get() == 1:messagebox.showinfo("提示", f"已选中【敲代码】")if self.video.get() == 1:messagebox.showinfo("提示", f"已选中【看视频】")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

2.7 Canvas:画布

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""canvas = Canvas(self, width=300, height=200)canvas.pack()# 画一条直线。以 横坐标,纵坐标 两个为一组canvas.create_line(10, 10, 30, 20, 40, 50)# 画一个矩形。canvas.create_rectangle(50, 50, 100, 100)# 画一个椭圆canvas.create_oval(50, 50, 100, 100)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

预览效果:
在这里插入图片描述

2.10 Menu:菜单

from tkinter import *class Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""menubar = Menu(self.master)# 创建一级菜单file_menu = Menu(menubar, tearoff=0)file_menu.add_command(label='打开')file_menu.add_command(label='新建')menubar.add_cascade(label="文件", menu=file_menu)# 创建二级菜单(三级菜单同理)edit_menu = Menu(file_menu, tearoff=0)edit_menu.add_command(label="修改")edit_menu.add_command(label="保存")file_menu.add_cascade(label="编辑", menu=edit_menu)# 将菜单加至主窗体中self.master.config(menu=menubar)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x300+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

3 布局管理器

布局管理器布局方式
pack水平、竖直
grid表格
place位置

3.1 pack:包

选项说明取值范围
side停靠方向top(上)、botton(下)、left(左)、right(右)
fill填充方式x(水平)、y(垂直)、both(水平+垂直)、none(不填充)
expand扩大方式True(随主窗体的大小变化)、False(不随主窗体变化)
anchor方向N(北)、S(南)、W(西)、E(东)、Center(中心) 等
ipandx、ipandy内边距非负整数
padx、pady外边距非负整数
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""Button(self, text='A').pack(side=LEFT, expand=YES, fill=Y)Button(self, text='B').pack(side=TOP, expand=YES, fill=BOTH)Button(self, text='C').pack(side=RIGHT, expand=YES, fill=NONE)Button(self, text='D').pack(side=LEFT, expand=NO, fill=Y)Button(self, text='E').pack(side=TOP, expand=YES, fill=BOTH)Button(self, text='F').pack(side=BOTTOM, expand=YES)Button(self, text='G').pack(anchor=SE)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

3.2 grid:网格

选项说明取值范围
row单元格的行数从 0 开始的正整数
rowspan跨行,跨越的行数正整数
column单元格的列号从 0 开始的正整数
columnspan跨列,跨越的列数正整数
ipandx,ipandy子组件之间的间隔,按x、y 方向非负浮点数,默认 0.0
pandx,pandy并列组件之间的间隔,按x、y 方向非负浮点数,默认 0.0
sticky组件紧贴所在单元格的某一个角,如:东西南北等n、s、w、e、nw、sw、se、ne、center(默认)
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="用户名")self.label01.grid(row=0, column=0)self.entry01 = Entry(self)self.entry01.grid(row=0, column=1)Label(self, text="密码").grid(row=1, column=0)Entry(self, show="*").grid(row=1, column=1)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

3.3 place:位置

选项说明取值范围
x,y组件左上角的绝对坐标(相对于窗口)非负整数
relx,rely组件左上角的相对坐标(相对于父容器)0=最左边,0.5=正中间,1=最右边
width,height组件的宽度和高度(相对于窗口)
relwidth,relheight组件的宽度和高度(相对于父容器)
anchor对齐方式n、s、w、e、nw、ne、sw、se、center(默认)
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""Button(self.master, text='A').place(x=0, y=0)Button(self.master, text='B').place(x=100, y=100, width=100, height=50)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

效果预览:
在这里插入图片描述

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

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

相关文章

Shell条件变量练习

1.算数运算命令有哪几种? (1) "(( ))"用于整数运算的常用运算符,效率很高 [rootshell scripts]# echo $((24*5**2/8)) #(( ))2452814 14 (2) "$[ ] "用于整数运算 [rootshell scripts]# echo $[24*5**2/8] #[ ]也可以运…

Python缺失值处理实现

在数据处理相关工作中,读取的数据中常常会有缺失值的情况,为顺利进行后续的操作,需要首先对缺失值进行处理,处理的方式一般为删除或填充,Python中提供了专门的工具包,可以方便地进行实现。读取操作可以由pa…

WebGL技术框架及功能

WebGL(Web Graphics Library)是一种用于在Web浏览器中渲染交互式3D和2D图形的JavaScript API。它允许在不需要插件的情况下,在支持WebGL的浏览器中直接运行高性能的图形渲染。WebGL没有一个固定的技术框架,而是基于JavaScript API…

【Vue】绝了!这生命周期流程真...

hello,我是小索奇,精心制作的Vue系列持续发放,涵盖大量的经验和示例,如果对您有用,可以点赞收藏哈~ 生命周期 Vue.js 组件生命周期: 生命周期函数(钩子)就是给我们提供了一些特定的…

SpringBoot整合MongoDB: 构建高效的数据存储应用

文章目录 1. 引言2. MongoDB简介3. 准备工作4. SpringBoot中配置MongoDB5. 创建MongoDB实体类6. 使用Spring Data MongoDB进行数据操作7. 编写Service层8. 控制器层9. 测试10. 拓展10.1. 复杂查询10.2. 数据分页10.3. 索引优化 11. 总结 🎉SpringBoot整合MongoDB: 构…

Django回顾2

目录 一.HTTP 1.URL介绍 2.格式: 3.补充: 二.web框架 1.什么是框架 2.什么是web框架 3.wsgi协议 基于wsgi协议的web服务器: 4.协议是怎么规定的 三.Django 1.MVC与MTV模型(所有框架其实都遵循MVC架构) 2.…

别太担心,人类只是把一小部分理性和感性放到了AI里

尽管人工智能(AI)在许多方面已经取得了重大进展,但它仍然无法完全复制人类的理性和感性。AI目前主要侧重于处理逻辑和分析任务,而人类则具有更复杂的思维能力和情感经验。 人类已经成功地将一些可以数据化和程序化的理性和感性特征…

企业级开发链表思路

项目结构 头文件代码 头文件代码LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #include <stdio.h> #include <stdlib.h> #include <iostream> // 链表小节点 typedef struct LINKBODE {struct LINKBODE* next;}LinkNode; // 遍历的函数指针 typedef …

人工智能|机器学习——感知器算法原理与python实现

感知器算法是一种可以直接得到线性判别函数的线性分类方法&#xff0c;它是基于样本线性可分的要求下使用的。 一、线性可分与线性不可分 为了方便讨论&#xff0c;我们蒋样本增加了以为常数&#xff0c;得到增广样向量 y&#xff08;1;;;...;&#xff09;,则n个样本的集合为&a…

零信任安全:远程浏览器隔离(RBI)的重要性

引言 在当今数字化时代&#xff0c;网络安全已成为个人和企业关注的焦点。随着网络攻击和恶意软件的不断增加&#xff0c;远程浏览器隔离(RBI)SAAS系统变得至关重要。本文将深入探讨远程浏览器隔离系统的重要性&#xff0c;以及它如何帮助用户保护其网络免受恶意软件和网络攻击…

蓝桥杯day02——Fizz Buzz

1、题目 给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] &…

计算机杂谈系列精讲100篇-【计算机应用】PyTorch部署及分布式训练

目录 C平台PyTorch模型部署流程 1.模型转换 1. 不支持的操作 2. 指定数据类型 2.保存序列化模型 3.C load训练好的模型 4. 执行Script Module PyTorch分布式训练 分布式并行训练概述 Pytorch分布式数据并行 手把手渐进式实战 A. 单机单卡 B. 单机多卡DP C. 多机多卡DDP D. L…

Blender动画导入Three.js

你是否在把 Blender 动画导入你的 ThreeJS 游戏(或项目)中工作时遇到问题? 您的 .glb (glTF) 文件是否正在加载,但没有显示任何内容? 你的骨骼没有正确克隆吗? 如果是这样,请阅读我如何使用 SkeletonUtils.js 解决此问题 1、前提条件 你正在使用 Blender 3.1+(此版本…

mysql 性能排查

mysql 下常见遇到的问题有&#xff0c;mysql连接池耗尽&#xff0c;死锁、慢查、未提交的事务。等等我们可能需要看&#xff1b;我们想要查看的可能有 1.当前连接池连接了哪些客户端&#xff0c;进行了哪些操作 2.当前造成死锁的语句有哪些&#xff0c;是哪个客户端上的&#x…

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

vue3+ts 全局函数和变量的使用

<template><div>{{ $env }}<br />{{ $filters.format("的飞机") }}</div> </template><script setup lang"ts"> import { getCurrentInstance } from "vue"; const app getCurrentInstance(); console.log…

07-学成在线修改/查询课程的基本信息和营销信息

修改/查询单个课程信息 界面原型 第一步: 用户进入课程列表查询页面,点击编辑按钮编辑课程的相关信息 第二步: 进入编辑界面显示出当前编辑课程的信息,其中课程营销信息不是必填项,修改成功后会自动进入课程计划编辑页面 查询课程信息 请求/响应数据模型 使用Http Client测…

11月28日作业

提示并输入一个字符串&#xff0c;统计该字符中大写&#xff0c;小写字母个数&#xff0c;数字个数&#xff0c;空格个数以及其他字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {string str;int A0,a0,num0,backspac…

UDS 相关时间参数

文章目录 UDS 全部时间参数UDS 应用层诊断时间参数1、P2 Client P2 Server P2* Client P2* Server 图例2、S3 Client S3 Server 图例 UDS CNA-TP网络层时间参数1、N_As/N_Ar 图例2、N_Bs 图例3、 N_Br 图例4、N_Cs 图例N_Cr 图例 UDS 网络层流控制时间参数 UDS 全部时间参数 UD…

智安网络|探索云安全合规要求:等保2.0时代的新趋势解析

随着信息技术的不断发展和应用的广泛普及&#xff0c;信息安全问题日益凸显&#xff0c;特别是在云计算时代&#xff0c;企业对于云平台的安全保障需求更为迫切。等级保护&#xff08;等保&#xff09;作为我国信息安全的基本要求&#xff0c;已经进入了2.0时代&#xff0c;对于…