二次元姓名生成器(饮料名+动漫角色名)
本文介绍了一个基于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) // 2y = (screen_height - height) // 2window.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:breakresult_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()