02 tkinter有趣项目-头像制作-界面设计

embedded/2024/9/18 13:39:40/ 标签: python, tkinter, ui

头像制界面设计

在这里插入图片描述

**avatar.png**

在这里插入图片描述

**界面**

界面分析

  1. 背景图片:

    • 顶部中央位置显示一个小孩背着书包的图片。这个图片是程序的背景,占据了大部分的窗口空间。
  2. 标题和按钮:

    • 在图片上方,有一个标题栏,显示文本“在线姓氏头像制作”,使用隶书字体,字体大小为22,颜色为红色。
    • 标题下方有一个按钮,上面有“ ★☆★ 踢我一下 ☆★☆ ”的文本,使用隶书字体,大小为14,背景色为#b0fcff。
  3. 输入区域:

    • 在标题和按钮下方,有一个输入区域,分为几个部分:
      • 姓氏输入: 在输入区域的最左侧,有一个标签“输入姓氏”,用户可以在此输入框中输入姓氏。
      • 头像模板选择: 紧接着姓氏输入框的右侧,有一个下拉列表,用户可以从中选择不同的头像模板,如“献花男孩”、“风车男孩”等。
      • 印签文字输入: 在模板选择的下方,有一个标签“印签文字”,用户可以在此输入框中输入想要添加到头像上的印签文字。
      • 性别选择: 在印签文字输入框的下方,有一个标签“性别”,用户可以通过一个数值选择器(Spinbox)选择性别,选项为“男”或“女”。
  4. 装饰元素:

    • 根据你提供的描述,程序中还可能包含一些装饰元素,如蓝色和黄色的圆形装饰,上面分别有文字“大”、“小”、“菜”、“~”。这些装饰元素可能被放置在窗口的右侧或其它空白区域,以增加视觉效果。

界面布局

  • 主窗口标题: “头像制作”
  • 窗口大小: 600x500像素,位置偏移屏幕左上角1200x50像素
  • 窗口属性: 不可调整大小,始终位于其他窗口之上

主要组件

  1. 背景图片: 显示一个小孩背着书包的图片,背景为浅色。
  2. 标题: “在线姓氏头像制作”,字体为隶书,大小为22,颜色为红色。
  3. 按钮: 文本为" ★☆★ 踢我一下 ☆★☆ ",字体为隶书,大小为14,背景色为#b0fcff。
  4. 输入区域:
    • 姓氏输入: 用户可以输入姓氏。
    • 头像模板选择: 提供多个头像模板供用户选择,如"献花男孩"、"风车男孩"等。
    • 印签文字输入: 用户可以输入想要添加到头像上的印签文字。
    • 性别选择: 用户可以选择性别,选项为"男"或"女"。

注意

最下面的输入区域我用的是frame组件,可以让这个组件还是按照pack布局root窗口上四个小组件被frame组件包裹起来,它们之间按照grid布局。我用的是这个蠢方法,我估计还有更加简洁方便的方式。相信看我文章的大佬们心中有了更好的方法,希望可以教教小趴菜。咋们一起学习,一起进步啦,相信咋们是最棒的,加油,么么哒!

程序代码解析

python">from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk# 导入Tkinter库及其扩展ttk,以及PIL库用于图像处理。root = Tk()
# 创建Tkinter的主窗口实例。root.title('头像制作')
# 设置窗口标题为“头像制作”。root.geometry('600x500+1200+50')
# 设置窗口大小为600x500像素,并指定窗口在屏幕上的位置(x=1200, y=50)。root.resizable(False, False)
# 设置窗口大小不可调整。root.attributes("-topmost", True)
# 设置窗口始终在其他窗口之上。img = Image.uiltin">open('avatar.png')
# 使用PIL库打开名为'avatar.png'的图片文件。img = img.resize((464, 364))
# 将图片调整为464x364像素大小。img = ImageTk.PhotoImage(img)
# 将PIL图像转换为Tkinter可以使用的PhotoImage对象。# 创建一个Label组件,用于显示图片,并将其添加到窗口中。
Label(root, image=img).pack()# 创建一个Label组件,显示文本“在线姓氏头像制作”,设置字体和前景色,并将其添加到窗口中。
Label(root, text='在线姓氏头像制作', font=("隶书", 22), fg='red').pack()# 创建一个按钮,显示特定文本和样式,并将其添加到窗口中。
Button(root, text=' ★☆★ 踢我一下 ☆★☆ ', font=("隶书", 14), width='33', bg='#b0fcff').pack()name = StringVar()
# 创建一个StringVar变量,用于存储输入框的值。name.uiltin">set('宇宙第一')
# 初始化StringVar变量的值为“宇宙第一”。text = StringVar()
# 创建另一个StringVar变量,用于存储另一个输入框的值。text.uiltin">set('小趴菜~')
# 初始化StringVar变量的值为“小趴菜~”。number_int_var = StringVar()
# 创建一个StringVar变量,用于存储下拉列表的值。frame = Frame(root)
# 创建一个Frame组件,作为其他组件的容器。frame.pack()
# 将Frame组件添加到窗口中。Label(frame, text='输入姓氏', font=("隶书", 20)).grid(row=0, column=0)
# 在Frame中创建一个标签,显示文本“输入姓氏”。Entry(frame, textvariable=name, font=("微软雅黑", 10)).grid(row=0, column=1)
# 创建一个输入框,与name变量绑定,并设置字体。Label(frame, text='头像模板', font=("隶书", 20)).grid(row=0, column=2)
# 创建一个标签,显示文本“头像模板”。numberChosen = ttk.Combobox(frame, textvariable=number_int_var)
# 创建一个下拉列表组件,与number_int_var变量绑定。numberChosen['values'] = ('献花男孩','风车男孩','可爱男孩','摆酷男孩','可爱女孩','接花女孩','提琴女孩','口罩女孩'
)
# 设置下拉列表的选项。numberChosen.grid(row=0, column=3)
# 将下拉列表添加到Frame中。numberChosen.uiltin">set('接花女孩')
# 默认选中下拉列表中的“接花女孩”。Label(frame, text='印签文字', font=("隶书", 20)).grid(row=1, column=0)
# 创建一个标签,显示文本“印签文字”。Entry(frame, textvariable=text, font=("微软雅黑", 10)).grid(row=1, column=1)
# 创建一个输入框,与text变量绑定,并设置字体。Label(frame, text='性别', font=("隶书", 20)).grid(row=1, column=2)
# 创建一个标签,显示文本“性别”。Spinbox(frame, from_=0, to=10, values=("男", "女"), font=("微软雅黑", 10)).grid(row=1, column=3)
# 创建一个选择框,允许用户选择“男”或“女”。# 运行程序
if __name__ == '__main__':root.mainloop()
# 如果这个脚本是直接运行的,而不是被导入的,则进入Tkinter的主事件循环,开始显示窗口并响应用户操作。

把程序封装成一个类方便后面使用

python">import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk# 导入所需的模块。tkinter是Python的标准GUI库,ttk是tkinter的扩展,PIL用于图像处理。
class AvatarMaker(tk.Tk):# 定义一个名为AvatarMaker的类,继承自tk.Tk,即Tkinter的主窗口类。def __init__(self):uiltin">super().__init__()# 调用父类的构造函数,初始化窗口。self.numberChosen = '献花男孩'self.title('头像制作')# 设置窗口标题为“头像制作”。self.geometry('600x500+1200+50')# 设置窗口大小为600x500像素,并指定窗口在屏幕上的位置(x=1200, y=50)。self.resizable(False, False)# 设置窗口大小不可调整。self.attributes("-topmost", True)# 设置窗口始终在其他窗口之上。# 加载并显示头像图片self.img = Image.uiltin">open('avatar.png')# 使用PIL库打开名为'avatar.png'的图片文件。self.img = self.img.resize((464, 364))# 将图片调整为464x364像素大小。self.photo_img = ImageTk.PhotoImage(self.img)# 将PIL图像转换为Tkinter可以使用的PhotoImage对象。self.label_image = tk.Label(self, image=self.photo_img)# 创建一个Label组件,用于显示图片。self.label_image.pack()# 将Label组件添加到窗口中。# 添加标题self.label_title = tk.Label(self, text='在线姓氏头像制作', font=("隶书", 22), fg='red')# 创建一个Label组件,显示文本“在线姓氏头像制作”,设置字体和前景色。self.label_title.pack()# 将Label组件添加到窗口中。# 添加按钮self.button_kick = tk.Button(self, text=' ★☆★ 踢我一下 ☆★☆ ', font=("隶书", 14), width='33', bg='#b0fcff')# 创建一个按钮,显示特定文本和样式。self.button_kick.pack()# 将按钮添加到窗口中。# 创建输入框和下拉列表的变量self.name_var = tk.StringVar(value='宇宙第一')# 创建一个StringVar变量,用于存储输入框的值,并初始化为“宇宙第一”。self.text_var = tk.StringVar(value='小趴菜~')# 创建另一个StringVar变量,用于存储另一个输入框的值,并初始化为“小趴菜~”。self.number_int_var = tk.StringVar()# 创建一个StringVar变量,用于存储下拉列表的值。# 创建输入框和下拉列表self.create_widgets()# 调用create_widgets方法来创建其他界面组件。def create_widgets(self):frame = tk.Frame(self)# 创建一个Frame组件,作为其他组件的容器。frame.pack()# 将Frame组件添加到窗口中。tk.Label(frame, text='输入姓氏', font=("隶书", 20)).grid(row=0, column=0)# 在Frame中创建一个标签,显示文本“输入姓氏”。tk.Entry(frame, textvariable=self.name_var, font=("微软雅黑", 10)).grid(row=0, column=1)# 创建一个输入框,与self.name_var变量绑定,并设置字体。tk.Label(frame, text='头像模板', font=("隶书", 20)).grid(row=0, column=2)# 创建一个标签,显示文本“头像模板”。self.numberChosen = ttk.Combobox(frame, textvariable=self.number_int_var)# 创建一个下拉列表组件,与self.number_int_var变量绑定。self.numberChosen['values'] = ('献花男孩', '风车男孩', '可爱男孩', '摆酷男孩', '可爱女孩', '接花女孩', '提琴女孩', '口罩女孩')# 设置下拉列表的选项。self.numberChosen.grid(row=0, column=3)# 将下拉列表添加到Frame中。self.numberChosen.uiltin">set('献花男孩')# 默认选中下拉列表中的“献花男孩”。tk.Label(frame, text='印签文字', font=("隶书", 20)).grid(row=1, column=0)# 创建一个标签,显示文本“印签文字”。tk.Entry(frame, textvariable=self.text_var, font=("微软雅黑", 10)).grid(row=1, column=1)# 创建一个输入框,与self.text_var变量绑定,并设置字体。tk.Label(frame, text='性别', font=("隶书", 20)).grid(row=1, column=2)# 创建一个标签,显示文本“性别”。tk.Spinbox(frame, from_=0, to=10, values=("男", "女"), font=("微软雅黑", 10)).grid(row=1, column=3)# 创建一个选择框,允许用户选择“男”或“女”。# 运行程序if __name__ == '__main__':# 如果这个脚本是直接运行的,而不是被导入的,则创建AvatarMaker类的实例。app = AvatarMaker()# 进入Tkinter的主事件循环,开始显示窗口并响应用户操作。app.mainloop()

注意事项

  • 确保avatar.png图片文件与程序在同一目录下,否则需要修改图片路径。
  • 该程序目前只提供了一个静态的头像背景,没有实现动态生成头像的功能。如果需要进一步开发,可以考虑集成图像处理库来根据用户输入生成头像。

可能的扩展

  • 实现一个功能,根据用户输入的姓氏、选择的模板和印签文字,动态生成并显示个性化的头像。
  • 增加保存功能,允许用户保存生成的头像到本地文件系统。

以上就是对程序的简单介绍和笔记。希望对你有所帮助!


http://www.ppmy.cn/embedded/99857.html

相关文章

试填法,LeetCode 3145. 大数组元素的乘积

一、题目 1、题目描述 一个非负整数 x 的 强数组 指的是满足元素为 2 的幂且元素总和为 x 的最短有序数组。下表说明了如何确定 强数组 的示例。可以证明,x 对应的强数组是独一无二的。 数字二进制表示强数组100001[1]801000[8]1001010[2, 8]1301101[1, 4, 8]23101…

如何通过rsync+sersync 实现同步备份

该文档是在很早之前写的,一直存在草稿箱中,最近在整理其它学习资料时发现还没有发布,内容和方法有可能和现在的操作系统版本有些不符合了,但处理思路没有变化,大家可以根据最新版本要求,参照该文档进行配置…

C++:哈希

目录 unordered系列关联式容器 1:unordered_map And unordered_multimap 2:unordered_set And unordered_multiset 3:哈希冲突 4:哈希冲突 5:哈希函数 6:解决哈希冲突 1:闭散列 2&#xf…

CentOS 7.9 安装部署 EchoMimic

EchoMimic学习地址:https://github.com/BadToBest/EchoMimic CentOS 7.9 安装部署 EchoMimic 1、创建虚拟机2、基础环境准备2.1 安装驱动2.2 下载 Anaconda3-2024.06-1-Linux-x86_64.sh2.3 下载完成后执行2.4 退出客户端重新连一下2.5 查看python版本及cuda版本 3 E…

Android笔试面试题AI答之Kotlin常见考点总结

Kotlin面试题主要涵盖了Kotlin语言的基础、特性、高级用法以及与其他编程语言的比较等多个方面。以下是Kotlin常见面试考点的总结: Kotlin基础: 定义与特性:简述Kotlin是什么,以及它的主要特性,如空安全、扩展函数、协…

23 注意力机制—BERT

目录 BERT 预训练NLP 里的迁移学习BERTBERT动机BERT 预训练 NLP 里的迁移学习 在计算机视觉中比较流行,将 ImageNet 或者更大的数据集上预训练好的模型应用到其他任务中,比如小数据的预测、图片分类或者是目标检测 使用预训练好的模型(例如 word2vec 或语言模型)来抽取词、…

Spring @Async注解【总结记录】

1、简介: 从Spring3开始提供了Async注解,用于异步方法调用,调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。 该注解可以被标注在类或方法(通…

【速览】Linux(更新中)

目录 一、背景二、优缺点三、适用场景四、核心组成文件与目录管理 五、底层原理六、对比参考 一、背景 这个技术出现的背景、初衷和要达到什么样的目标或是要解决什么样的问题。这个问题非常关键,也就是说,你在学习一个技术的时候,需要知道这…

MongoDB如何实现大于小于查询

MongoDB是一个高性能、开源、无模式的文档型数据库,它使用BSON(Binary JSON)作为存储格式,支持丰富的查询语法,包括大于( g t )、小于( gt)、小于( gt&#x…

基于Python的机器学习系列(7):多元逻辑回归

在本篇博文中,我们将探讨多元逻辑回归,它是一种扩展的逻辑回归方法,适用于分类数量超过两个的场景。与二元逻辑回归不同,多元逻辑回归使用Softmax函数将多个类别的概率输出映射到[0, 1]范围内,并确保所有类别的概率和为…

如何在算家云搭建模型mPLUG-Owl3(智能对话)

一、模型介绍 1. 项目背景与概述 mPLUG-Owl3 是阿里巴巴 mPLUG 团队最新发布的通用多模态大模型,该模型在理解和处理复杂多图及长视频内容方面实现了显著突破。这一创新成果不仅提升了模型的推理效率,还保持了高度的准确性,为多模态大模型的…

使用Intent在活动之间穿梭

文章目录 使用Intent在活动之间穿梭使用显式Intent使用隐式Intent更多隐式Intent的用法 使用Intent在活动之间穿梭 Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Inten…

微服务基础知识

1、微服务基础知识 1.1 系统架构的演变 随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的应⽤架构已⽆法应对,分布式服务架构以及微服 务架构势在必⾏,必需⼀个治理系统确保架构有条不紊的演进。 1.1.1 单体应用架构 Web应⽤程序…

力扣爆刷第174天之TOP200五连刷136=140(最小k数、字典序、跳跃游戏)

力扣爆刷第174天之TOP200五连刷136140(最小k数、字典序、跳跃游戏) 文章目录 力扣爆刷第174天之TOP200五连刷136140(最小k数、字典序、跳跃游戏)一、LCR 159. 库存管理 III二、450. 删除二叉搜索树中的节点三、440. 字典序的第K小…

docker相关

docker相关 一、docker安装二、docker安装mysql1、安装mysql镜像2、启动mysql容器3、查看已启动的容器4、移除指定容器5、更改mysql容器的编码方式为utf-8 安装Redis1、安装redis镜像2、启动redis、置redis持久化存储,避免重启容器后,数据丢失3、使用red…

ES存量数据迁移优化措施

在将存量数据迁移到 Elasticsearch (ES) 时,可以采取多种优化措施,以提高迁移效率、减少对来源系统和目标系统的影响,并确保数据的完整性。以下是一些建议和优化措施: 1. 批量操作 使用 Bulk API:Elasticsearch 提供…

Android 14适配

最近刚刚做了Android 14的适配(即targetSdkVersion 升级到 34 ),通过此博客整理下相关注意点。 前台服务类型 当targetSdkVersion > 34 ,应用内的前台服务(Foreground Service)需要指定至少一种前台服务…

Java-BatchProcessingUtil工具类

为了构建一个功能全面且灵活的 BatchProcessingUtil 工具类,我们可以考虑添加以下功能: 批处理遍历: 控制每次处理的元素数量。 线程池管理: 支持自定义线程池大小。 异步回调: 在所有任务完成后执行回调操作。 进度跟踪: 提供进度跟踪功能,便于了解处理进度。 异常处理…

冷硬缓存——利用缓存滥用绕过 RPC 接口安全

介绍 MS-RPC 是 Windows 操作系统的基石之一。早在 20 世纪 90 年代发布,它就已扎根于系统的大部分部分。服务管理器?RPC。Lsass?RPC。COM?RPC。甚至一些针对域控制器的域操作也使用 RPC。鉴于 MS-RPC 已经变得如此普遍,您可以预料到它已经受到严格的审查、记录和研究。 …

王道数据结构 | 第六章 图 【未完成】

8.23预204-214页:6.1 中 图的概念 有向图 无向图 简单图 多重图 连通图 非连通图 强连通图 子图 生成树 极大连通子图 极小连通子图 生成子图 路径 权值 距离 环 简单路径 简单回路 有向树 summary 第五章 一些关键词,已经被第五章整吐了啊(((φ(◎ロ…