二次元姓名生成器(饮料名+动漫角色名)

发布于:2025-07-25 ⋅ 阅读:(14) ⋅ 点赞:(0)

本文介绍了一个基于Python Tkinter的二次元姓名生成器GUI程序。该程序可以从预设的饮料名称和动漫角色名(分为男性和女性)中随机组合生成不超过5个字的二次元风格姓名。

主要功能包括:

1)可选择生成男生名或女生名;

2)点击按钮随机生成姓名;

3)支持复制结果到剪贴板。程序界面采用现代化设计,包含标题、性别选择区、生成按钮、结果显示区和复制按钮。

该工具适合二次元爱好者或需要随机姓名的场景使用。 

import tkinter as tk
from tkinter import ttk
import random
import sys

# 扩展的饮料名称列表
beverages = [
    "雪碧", "可乐", "旺仔", "奶茶", "咖啡", "橙汁", "绿茶", "红茶",
    "牛奶", "酸奶", "椰汁", "柠檬", "美年达", "芬达", "脉动",
    "冰红茶", "养乐多", "王老吉", "加多宝", "红牛", "乌龙茶", "茉莉",
    "蜂蜜", "柚子", "蓝莓", "芒果", "草莓", "西瓜", "蜜桃", "葡萄",
    "苹果", "香蕉", "菠萝", "石榴", "樱桃", "荔枝", "桂圆", "杏仁",
    "核桃", "花生", "芝麻", "红豆", "绿豆", "黑豆", "燕麦", "小麦"
]

# 扩展的动漫角色列表(分为男性和女性)
male_chars = [
    "司空震", "孙悟空", "路飞", "鸣人", "佐助", "柯南", "大雄",
    "胖虎", "小夫", "黑崎", "银时", "冲田", "炭治郎", "善逸",
    "伊之助", "索隆", "艾斯", "鼬", "卡卡西", "我爱罗", "犬夜叉",
    "杀生丸", "夜斗", "坂田", "土方", "总悟", "新八", "剑心",
    "斋藤", "绯村", "工藤", "服部", "基德", "赤井", "安室", "夏目",
    "赵云", "韩信", "李白", "诸葛亮", "吕布", "关羽", "张飞",
    "马超", "黄忠", "刘备", "曹操", "典韦", "夏侯惇", "夏侯渊",
    "周瑜", "孙策", "孙权", "司马懿", "元歌", "百里守约", "百里玄策",
    "铠", "曜", "镜", "澜", "暃", "晟", "李信", "盘古", "达摩", "哪吒"
]

female_chars = [
    "小乔", "安琪拉", "静香", "灰原", "小兰", "露琪亚", "神乐",
    "祢豆子", "娜美", "罗宾", "雏田", "井野", "赫敏", "亚丝娜",
    "三笠", "小樱", "纲手", "日向", "天天", "手鞠", "戈薇", "桔梗",
    "珊瑚", "神无", "神久夜", "雪女", "阎魔", "彼岸", "花子", "千与",
    "波妞", "苏菲", "琪琪", "小梅", "小月", "小葵", "小玉", "小町",
    "妲己", "貂蝉", "王昭君", "西施", "杨玉环", "大乔", "小乔",
    "孙尚香", "虞姬", "芈月", "武则天", "甄姬", "嫦娥", "女娲",
    "露娜", "镜", "阿轲", "花木兰", "公孙离", "瑶", "云缨", "夏洛特",
    "蔡文姬", "安琪拉", "不知火舞", "娜可露露", "伽罗", "米莱狄"
]


def center_window(window, width, height):
    """将窗口居中显示"""
    screen_width = window.winfo_screenwidth()
    screen_height = window.winfo_screenheight()

    x = (screen_width - width) // 2
    y = (screen_height - height) // 2

    window.geometry(f"{width}x{height}+{x}+{y}")


def generate_name():
    """生成随机姓名"""
    gender = gender_var.get()

    # 确保生成的姓名不超过5个字
    while True:
        beverage = random.choice(beverages)

        if gender == "男":
            char = random.choice(male_chars)
        else:
            char = random.choice(female_chars)

        full_name = beverage + char

        # 检查总长度
        if len(full_name) <= 5:
            break

    result_label.config(text=full_name)
    copy_btn.config(state=tk.NORMAL)  # 启用复制按钮

def copy_to_clipboard():
    """复制结果到剪贴板"""
    result = result_label.cget("text")
    if result and result != "点击上方按钮生成":
        root.clipboard_clear()
        root.clipboard_append(result)
        copy_btn.config(text="已复制!")
        root.after(2000, lambda: copy_btn.config(text="复制"))

def on_closing():
    """关闭窗口时的操作"""
    root.destroy()
    sys.exit()


# 创建主窗口
root = tk.Tk()
root.title("二次元姓名生成器")
root.resizable(False, False)
center_window(root, 400, 340)

# 设置主题颜色
bg_color = "#F5F5F5"
button_color = "#4D96FF"
button_hover = "#3A7BD5"
result_bg = "#FFFFFF"
frame_border = "#E0E0E0"

# 配置样式
style = ttk.Style()
style.theme_use("clam")

style.configure("TFrame", background=bg_color)
style.configure("TLabel", background=bg_color, font=("微软雅黑", 10))
style.configure("TButton", font=("微软雅黑", 11), background=button_color,
                foreground="white", borderwidth=1, padding=5)
style.map("TButton", background=[("active", button_hover)])

style.configure("TRadiobutton", background=bg_color, font=("微软雅黑", 10))
style.configure("Title.TLabel", font=("微软雅黑", 16, "bold"), foreground="#333333")
style.configure("Result.TLabel", font=("微软雅黑", 18, "bold"), foreground="#4D96FF",
                background=result_bg, anchor="center")

# 主框架
main_frame = ttk.Frame(root, padding=20)
main_frame.pack(fill=tk.BOTH, expand=True)

# 标题
title_label = ttk.Label(main_frame, text="二次元姓名生成器", style="Title.TLabel")
title_label.pack(pady=(0, 20))

# 性别选择框架
gender_frame = ttk.Frame(main_frame)
gender_frame.pack(pady=10)

gender_var = tk.StringVar(value="男")

male_rb = ttk.Radiobutton(gender_frame, text="男生名", variable=gender_var, value="男")
male_rb.pack(side=tk.LEFT, padx=15)

female_rb = ttk.Radiobutton(gender_frame, text="女生名", variable=gender_var, value="女")
female_rb.pack(side=tk.LEFT, padx=15)

# 生成按钮
btn_frame = ttk.Frame(main_frame)
btn_frame.pack(pady=15)

generate_btn = ttk.Button(btn_frame, text="生成有趣的名字", command=generate_name)
generate_btn.pack(side=tk.LEFT, padx=5)

# 结果显示区域
result_frame = ttk.Frame(main_frame, relief=tk.SOLID, borderwidth=1,
                         style="TFrame", padding=10)
result_frame.pack(fill=tk.X, pady=(10, 15), padx=20)

result_label = ttk.Label(result_frame, text="点击上方按钮生成",
                         style="Result.TLabel")
result_label.pack(fill=tk.BOTH, expand=True)

# 复制按钮
copy_btn = ttk.Button(main_frame, text="复制", command=copy_to_clipboard,
                      state=tk.DISABLED)
copy_btn.pack(pady=(0, 10))

# 关闭事件
root.protocol("WM_DELETE_WINDOW", on_closing)

# 运行主循环
root.mainloop()


网站公告

今日签到

点亮在社区的每一天
去签到