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

news2024/11/15 13:40:48

头像制界面设计

在这里插入图片描述

**avatar.png**

在这里插入图片描述

**界面**

界面分析

  1. 背景图片:

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

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

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

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

界面布局

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

主要组件

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

注意

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

程序代码解析

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.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.set('宇宙第一')
# 初始化StringVar变量的值为“宇宙第一”。

text = StringVar()
# 创建另一个StringVar变量,用于存储另一个输入框的值。

text.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.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的主事件循环,开始显示窗口并响应用户操作。

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

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):
        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.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.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.coloradmin.cn/o/2068970.html

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

相关文章

vue+fastadmin跨域请求问题

记录一个 vuefastadmin项目api 访问跨域问题 前端页面使用的是 axios 发起请求,api 是 fastadmin 写的,遇到跨域错误: 解决办法: 控制器代码中加入check_cors_request()实现跨域检测 fa 官网对跨域的说明 :跨域配置 -…

乐凡三防高亮屏工业平板电脑的应用场景

随着科技的发展,三防高亮屏工业平板电脑在越来越多的领域中得到广泛应用。下面探讨一下三防高亮屏工业平板电脑的应用场景及其在不同领域中的优势。 物流行业 在物流行业中,三防高亮屏工业平板电脑可以用于仓库管理、货物跟踪、运输调度等多个方面。在阳…

在Ubuntu22.04使用PySide6或PyQt5的文件选择框时,无法显示文件夹中的文件问题的解决方案

摘要:在使用PySide6或PyQt5开发图形用户界面(GUI)应用程序时,我们经常会使用 QFileDialog 来让用户选择文件或文件夹。然而,有时候会遇到一个奇怪的问题,即在打开文件选择对话框时,某些文件类型…

Vue3的三种样式控制及实现原理

你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎 Vue3中一共有三种样式控制,分别是全局样式控制、局部作用域样式控制和深度样式控制,今天我们一起看下这三种样式控制的使用,以及实现的原理是什么。 一、全局样式控制…

数据恢复技术-手动修复MBR-/NTFS分区

前言 本文只作为本人学习笔记,不做他用,转载请注明原处谢谢! 本文教大家如何手工修复MBR引导分区,找回丢失的数据,先附加题目镜像(右键我的电脑或win标,选择管理/磁盘管理---操作---附加VHD&…

笔记整理—uboot启动过程(2)BL1低级初始化

lowlevel_init看名字就知道是关于初级方面的初始化,其中可用将其干的事情分为11个步骤: (1)push {lr} 也就是lr压栈。 (2)检测复位状态:如冷上电、热启动、睡眠等。冷上电要初始化DDR后才能使用…

MS2232/MS2232T——±20kV ESD 保护、3V-5.5V 供电、真 RS-232 收发器

MS2232/MS2232T 芯片是集成电荷泵、具有 20kV ESD 保护的 RS-232 收发器,包括两路接收器、两路发送器。芯 片满足 TIA/EIA-232 标准,为异步通信控制器和串口连接器 提供通信接口。 芯片采用 3V-5.5V 供电,电荷泵仅用 4 个 0.1-0.47μF 小…

GUI / GitOps / API: 用 Bytebase 实现 SQL 审核

修改数据库中的数据时,确保安全准确至关重要。Bytebase 提供 SQL 审核功能:将 SQL 变更应用到数据库之前,可对其进行评估。SQL 审核可通过 Bytebase GUI、GitOps 工作流或 API 触发。 本教程将使用 Bytebase 的 SQL 审核来改进数据库 Schema …

对数据治理和云采用的思考:过去和现在

组织在向云服务转变的过程中面临数据治理复杂性和挑战。 如今,到了 2024 年,形势已经发生了变化,但根本问题却愈演愈烈。 数据的增长以及网络攻击的频率和复杂性不断增加,使得对强大的数据治理和安全的需求比以往任何时候都更加…

Educational Codeforces Round 169 (Rated for Div. 2)

前言 电脑显示屏一闪一闪地感觉要拿去修了,比赛时重启了好几次。 手速场,E 题没学过 Sprague-Grundy 吃了亏,好在前四题都一发过才不至于掉分。 Standings:1214 题目链接:Dashboard - Educational Codeforces Round 16…

shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解

文章目录 一、概述1.1、普通字符1.2、元字符 二、转义字符$2.1、实例12.2、实例22.3、实例32.4、实例42.5、实例5 三、linux命令执行返回值$?说明 一、概述 shell中有两类字符:普通字符、元字符。 1.1、普通字符 在Shell中除了本身的字面意思外没有其他特殊意义…

设计模式-结构性模式-桥接模式

1.桥接模式定义 桥接模式就是将抽象部分与他的实现部分分离,使他们都可以独立的变化; 桥接模式用一种巧妙地方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,…

26个希腊字母写法和读音

瞧,在许多时候都会用到这些希腊字母,但不认识更不知道怎么读,so 记录一下便于查阅 26个希腊字母写法和读音 大写小写中文名英文注音意义Aα阿尔法Alpha角度;系数Bβ贝塔Beta磁通系数;角度;系数「γ伽玛Gamma电导系数(小写)Δδ德尔塔Delta变…

ES之二:centos7安装kibana和IK分词器

目录 一、Kibana介绍二、Kibana安装1、注意elasticsearch 和 kibana使用同一个版本2、更改配置3、kibana使用 三、Kibana安装1. 解压ik分词器2. 重新启动ES启动报错: 一、Kibana介绍 Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可…

客户端可以访问ntp时钟源,时间却一直不同步的问题

ntp时钟源通常是通过开放123 的udp端口对外提供ntp服务的,udp端口的访问可以通过nc -uvz xx.xx.xx.xx 123 端口进行验证,验证发现ntp时钟服务的123端口是开放的,也没有防火墙拦截123端口,但为什么客户端不同步ntp时钟源呢&#xf…

鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人

为何要有异常接管? 拿小孩成长打比方,大人总希望孩子能健康成长,但在成长过程中总会遇到各种各样的问题,树欲静而风不止,成长路上有危险,有时是自己的问题有时是外在环境问题.就像抖音最近的流行口水歌一样&#xff…

dp的练习总结(9)

P8766 异或三角 1.由题干给出的条件可知: (1)1≤a,b,c≤n,可得上限和枚举的范围 (2)a⊕b⊕c0,只有当前位相同的二进制数字异或才是 0,所以由此可知,当前位 a,b,c 都选 0,或 a,b,c 中任意两个数选择 1。同时…

Linux jobs命令:查看和管理后台任务

目录 一、jobs命令简介二、jobs命令适用的Linux版本三、jobs命令的基本语法四、jobs命令的常用选项或参数五、jobs命令实例5.1 显示当前shell中的后台作业将命令放到后台查看后台作业状态将后台作业带到前台 5.2 显示后台作业的进程号5.3 显示已停止的后台作业5.4 显示上次shel…

it程序员常用的技术社区网站有哪些

it程序员常用的技术社区网站有哪些??作为程序员,选择好合适的开发社区对提高自己的编程能力会有很大的帮助,技术人员经常会在各种技术交流社区游逛。优秀的实时开发社区确实能帮你积累不少开发经验技术教程 _ 网址大全 _ 博科趣 - 第1页技术教程网站,技…

cuda性能分析工具: nsight systems

安装 1. 安装nsys, nsys可以用命令行生成性能分析报告,参考: nsys profile 2. 安装Nsight Systems可视化工具NVIDIA Nsight Systems | NVIDIA 开发者 使用方法 1. 找一个可执行的cuda程序,编译成可执行文件,比如m…