摸鱼 发现创造 Rules & Tips
1. 遵守中国大陆相关法律法规
2. 推崇「哥伦布式」的发现
3. 创造不是复制粘贴,是自我表达

看到有虫友想给孩子起名,供参考

查看: 2157|回复: 4
fanjiazhen 发表于 2025-3-26 18:49:20
这是在xx破解逛 的时候看到的
qq.jpeg

  1. import sys
  2. import random
  3. from PyQt5.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QWidget,
  4.                              QLabel, QLineEdit, QPushButton, QHBoxLayout,
  5.                              QGridLayout, QGroupBox, QRadioButton, QButtonGroup)
  6. from PyQt5.QtCore import Qt, QRegExp
  7. from PyQt5.QtGui import QRegExpValidator, QFont
  8. from datetime import datetime

  9. class NameGeneratorApp(QMainWindow):
  10.     def __init__(self):
  11.         super().__init__()
  12.         self.setWindowTitle("小孩取名助手")
  13.         self.setGeometry(100, 100, 800, 600)
  14.          
  15.         # 初始化UI
  16.         self.init_ui()
  17.          
  18.         # 男性常用字库
  19.         self.male_characters = [
  20.             '伟', '强', '磊', '洋', '勇', '军', '杰', '涛', '浩', '宇',
  21.             '轩', '睿', '泽', '博', '文', '晨', '然', '昊', '明', '安',
  22.             '柏', '彬', '斌', '冰', '波', '超', '诚', '春', '聪', '德',
  23.             '东', '栋', '凡', '飞', '风', '峰', '刚', '光', '国', '海',
  24.             '晗', '汉', '翰', '航', '豪', '昊', '浩', '和', '宏', '洪',
  25.             '华', '辉', '佳', '家', '建', '健', '剑', '江', '金', '晋',
  26.             '京', '景', '靖', '敬', '君', '俊', '峻', '骏', '凯', '康',
  27.             '坤', '朗', '乐', '雷', '磊', '黎', '力', '立', '良', '亮',
  28.             '林', '龙', '伦', '仑', '茂', '民', '明', '铭', '鸣', '墨',
  29.             '楠', '宁', '鹏', '平', '奇', '琦', '祺', '谦', '强', '青',
  30.             '清', '庆', '秋', '然', '仁', '荣', '瑞', '睿', '润', '森',
  31.             '山', '善', '尚', '绍', '升', '生', '晟', '盛', '石', '世',
  32.             '书', '树', '思', '松', '嵩', '涛', '天', '庭', '通', '同',
  33.             '拓', '威', '伟', '玮', '炜', '文', '武', '熙', '熹', '曦',
  34.             '先', '贤', '祥', '翔', '晓', '孝', '心', '昕', '新', '信',
  35.             '星', '雄', '秀', '旭', '轩', '学', '勋', '岩', '彦', '扬',
  36.             '阳', '洋', '尧', '耀', '烨', '一', '毅', '英', '勇', '友',
  37.             '瑜', '宇', '羽', '雨', '禹', '玉', '钰', '元', '源', '远',
  38.             '岳', '云', '运', '泽', '展', '章', '昭', '哲', '真', '振',
  39.             '正', '政', '志', '智', '中', '忠', '钟', '洲', '周', '竹',
  40.             '卓', '子', '梓', '宗', '祖', '尊', '佐', '作', '祚', '安'
  41.         ]
  42.          
  43.         # 女性常用字库
  44.         self.female_characters = [
  45.             '婷', '敏', '静', '丽', '娟', '芳', '燕', '娜', '玲', '怡',
  46.             '雅', '欣', '雨', '诗', '思', '嘉', '梦', '琪', '萱', '宁',
  47.             '婵', '丹', '菲', '凤', '歌', '惠', '蕙', '娇', '洁', '婕',
  48.             '瑾', '晶', '娟', '兰', '岚', '莉', '丽', '莲', '琳', '玲',
  49.             '璐', '蔓', '梅', '美', '萌', '梦', '密', '苗', '妙', '敏',
  50.             '茗', '娜', '妮', '凝', '萍', '琪', '倩', '琴', '晴', '琼',
  51.             '秋', '蓉', '蕊', '芮', '瑞', '睿', '若', '莎', '珊', '善',
  52.             '诗', '书', '舒', '淑', '姝', '爽', '思', '斯', '素', '棠',
  53.             '婷', '彤', '婉', '薇', '雯', '妩', '西', '希', '霞', '仙',
  54.             '娴', '香', '晓', '笑', '欣', '馨', '秀', '旭', '萱', '雪',
  55.             '雅', '娅', '嫣', '妍', '艳', '燕', '阳', '瑶', '曜', '冶',
  56.             '野', '烨', '伊', '衣', '依', '仪', '怡', '宜', '颐', '艺',
  57.             '忆', '亦', '易', '懿', '茵', '音', '吟', '英', '莺', '樱',
  58.             '莹', '滢', '颖', '影', '雍', '悠', '瑜', '雨', '语', '玉',
  59.             '钰', '郁', '昱', '煜', '园', '媛', '月', '玥', '悦', '云',
  60.             '芸', '韵', '蕴', '泽', '昭', '珍', '真', '臻', '贞', '筝',
  61.             '芝', '枝', '芷', '珠', '竹', '庄', '姿', '子', '梓', '紫'
  62.         ]
  63.          
  64.         # 五行字库(按性别区分)
  65.         self.wuxing_characters = {
  66.             '金': {
  67.                 'male': ['鑫', '铭', '锋', '锦', '钰', '钧', '锐', '钢', '钟', '钱'],
  68.                 'female': ['钰', '铃', '银', '钗', '钏', '铢', '镘', '钤', '钿', '锳']
  69.             },
  70.             '木': {
  71.                 'male': ['林', '森', '楠', '桐', '楷', '枫', '柏', '松', '柳', '杨'],
  72.                 'female': ['柳', '梅', '桃', '杏', '樱', '桂', '榕', '桦', '柠', '檬']
  73.             },
  74.             '水': {
  75.                 'male': ['涵', '浩', '泽', '涛', '洋', '海', '江', '河', '湖', '溪'],
  76.                 'female': ['沐', '汐', '沁', '湄', '涓', '涟', '漪', '滟', '潇', '澜']
  77.             },
  78.             '火': {
  79.                 'male': ['炎', '煜', '煊', '灿', '灵', '炜', '烨', '熠', '炫', '炯'],
  80.                 'female': ['灵', '灿', '烟', '煠', '焓', '煖', '焮', '煣', '熳', '熠']
  81.             },
  82.             '土': {
  83.                 'male': ['坤', '城', '培', '基', '垣', '坦', '垚', '垠', '垲', '垌'],
  84.                 'female': ['培', '垠', '垲', '埴', '堇', '堉', '堋', '堍', '堎', '堞']
  85.             }
  86.         }

  87.     def init_ui(self):
  88.         # 主窗口部件
  89.         central_widget = QWidget()
  90.         self.setCentralWidget(central_widget)
  91.          
  92.         # 主布局
  93.         main_layout = QVBoxLayout()
  94.         main_layout.setSpacing(15)  # 整体垂直间距
  95.         central_widget.setLayout(main_layout)
  96.          
  97.         # ===== 第一板块:基本信息 =====
  98.         info_group = QGroupBox()
  99.         info_group.setTitle("基本信息")
  100.         info_group.setAlignment(Qt.AlignCenter)
  101.         info_group.setStyleSheet("""
  102.             QGroupBox {
  103.                 font-size: 14px;
  104.                 font-weight: bold;
  105.                 border: 1px solid silver;
  106.                 margin-top: 10px;
  107.             }
  108.             QGroupBox::title {
  109.                 subcontrol-origin: margin;
  110.                 left: 10px;
  111.             }
  112.         """)
  113.          
  114.         info_layout = QHBoxLayout()
  115.         info_layout.setSpacing(15)  # 内部组件间距
  116.         info_layout.setContentsMargins(20, 15, 20, 15)  # 边距
  117.          
  118.         # 姓氏输入
  119.         surname_layout = QHBoxLayout()
  120.         surname_layout.setSpacing(5)
  121.         surname_label = QLabel("姓氏:")
  122.         surname_label.setStyleSheet("font-size: 13px;")
  123.         self.surname_input = QLineEdit()
  124.         self.surname_input.setFixedWidth(120)
  125.         self.surname_input.setStyleSheet("font-size: 13px;")
  126.         surname_layout.addWidget(surname_label)
  127.         surname_layout.addWidget(self.surname_input, alignment=Qt.AlignLeft)
  128.          
  129.         # 性别选择
  130.         gender_layout = QHBoxLayout()
  131.         gender_layout.setSpacing(5)
  132.         gender_label = QLabel("性别:")
  133.         gender_label.setStyleSheet("font-size: 13px;")
  134.          
  135.         self.gender_group = QButtonGroup()
  136.         self.male_radio = QRadioButton("男")
  137.         self.male_radio.setStyleSheet("font-size: 13px;")
  138.         self.female_radio = QRadioButton("女")
  139.         self.female_radio.setStyleSheet("font-size: 13px;")
  140.         self.male_radio.setChecked(True)
  141.          
  142.         self.gender_group.addButton(self.male_radio)
  143.         self.gender_group.addButton(self.female_radio)
  144.          
  145.         gender_radio_layout = QHBoxLayout()
  146.         gender_radio_layout.setSpacing(10)
  147.         gender_radio_layout.addWidget(self.male_radio)
  148.         gender_radio_layout.addWidget(self.female_radio)
  149.          
  150.         gender_layout.addWidget(gender_label)
  151.         gender_layout.addLayout(gender_radio_layout)
  152.          
  153.         info_layout.addLayout(surname_layout)
  154.         info_layout.addLayout(gender_layout)
  155.         info_group.setLayout(info_layout)
  156.         main_layout.addWidget(info_group, alignment=Qt.AlignCenter)
  157.          
  158.         # ===== 第二板块:出生日期 =====
  159.         date_group = QGroupBox()
  160.         date_group.setTitle("出生日期")
  161.         date_group.setAlignment(Qt.AlignCenter)
  162.         date_group.setStyleSheet("""
  163.             QGroupBox {
  164.                 font-size: 14px;
  165.                 font-weight: bold;
  166.                 border: 1px solid silver;
  167.                 margin-top: 5px;
  168.             }
  169.             QGroupBox::title {
  170.                 subcontrol-origin: margin;
  171.                 left: 10px;
  172.             }
  173.         """)
  174.          
  175.         date_layout = QHBoxLayout()
  176.         date_layout.setSpacing(8)  # 日期组件间距
  177.         date_layout.setContentsMargins(20, 15, 20, 15)
  178.          
  179.         # 创建年月日时分秒输入框
  180.         self.date_inputs = []
  181.         date_labels = ["年", "月", "日", "时", "分", "秒"]
  182.         for label in date_labels:
  183.             hbox = QHBoxLayout()
  184.             hbox.setSpacing(2)
  185.             
  186.             input_box = QLineEdit()
  187.             input_box.setFixedWidth(45 if label == "年" else 30)
  188.             input_box.setAlignment(Qt.AlignCenter)
  189.             input_box.setStyleSheet("font-size: 13px;")
  190.             
  191.             # 设置验证器(只能输入数字)
  192.             validator = QRegExpValidator(QRegExp("[0-9]+"))
  193.             input_box.setValidator(validator)
  194.             
  195.             # 连接跳转信号
  196.             if label != "秒":
  197.                 input_box.textEdited.connect(lambda text, i=len(self.date_inputs): self.focus_next_input(i))
  198.             
  199.             hbox.addWidget(input_box)
  200.             hbox.addWidget(QLabel(label))
  201.             
  202.             date_layout.addLayout(hbox)
  203.             self.date_inputs.append(input_box)
  204.          
  205.         date_group.setLayout(date_layout)
  206.         main_layout.addWidget(date_group, alignment=Qt.AlignCenter)
  207.          
  208.         # ===== 第三板块:姓名建议 =====
  209.         name_group = QGroupBox()
  210.         name_group.setTitle("姓名建议")
  211.         name_group.setAlignment(Qt.AlignCenter)
  212.         name_group.setStyleSheet("""
  213.             QGroupBox {
  214.                 font-size: 14px;
  215.                 font-weight: bold;
  216.                 border: 1px solid silver;
  217.                 margin-top: 5px;
  218.             }
  219.             QGroupBox::title {
  220.                 subcontrol-origin: margin;
  221.                 left: 10px;
  222.             }
  223.         """)
  224.          
  225.         name_layout = QGridLayout()
  226.         name_layout.setHorizontalSpacing(8)  # 网格水平间距
  227.         name_layout.setVerticalSpacing(8)     # 网格垂直间距
  228.         name_layout.setContentsMargins(15, 15, 15, 15)
  229.          
  230.         # 创建3行5列的姓名显示标签
  231.         self.name_labels = []
  232.         for row in range(3):
  233.             for col in range(5):
  234.                 label = QLabel("")
  235.                 label.setAlignment(Qt.AlignCenter)
  236.                 label.setStyleSheet("""
  237.                     border: 1px solid gray;
  238.                     padding: 2px;
  239.                     background-color: #f0f0f0;
  240.                     min-width: 70px;
  241.                     min-height: 25px;
  242.                     font-size: 13px;
  243.                 """)
  244.                 label.setCursor(Qt.PointingHandCursor)
  245.                 label.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard)
  246.                  
  247.                 name_layout.addWidget(label, row, col)
  248.                 self.name_labels.append(label)
  249.          
  250.         name_group.setLayout(name_layout)
  251.         main_layout.addWidget(name_group, alignment=Qt.AlignCenter)
  252.          
  253.         # 按钮布局
  254.         button_layout = QHBoxLayout()
  255.         button_layout.setSpacing(20)
  256.         button_layout.setContentsMargins(0, 10, 0, 10)
  257.          
  258.         # 生成按钮
  259.         generate_button = QPushButton("生成姓名")
  260.         generate_button.setStyleSheet("""
  261.             QPushButton {
  262.                 padding: 6px;
  263.                 font-size: 13px;
  264.                 min-width: 90px;
  265.             }
  266.         """)
  267.         generate_button.clicked.connect(self.generate_names)
  268.         button_layout.addWidget(generate_button)
  269.          
  270.         # 刷新按钮
  271.         refresh_button = QPushButton("刷新")
  272.         refresh_button.setStyleSheet("""
  273.             QPushButton {
  274.                 padding: 6px;
  275.                 font-size: 13px;
  276.                 min-width: 90px;
  277.             }
  278.         """)
  279.         refresh_button.clicked.connect(self.generate_names)
  280.         button_layout.addWidget(refresh_button)
  281.          
  282.         button_layout.setAlignment(Qt.AlignCenter)
  283.         main_layout.addLayout(button_layout)
  284.          
  285.         # 添加弹性空间使内容居中
  286.         main_layout.addStretch(1)
  287.      
  288.     def focus_next_input(self, current_index):
  289.         """自动跳转到下一个输入框"""
  290.         if len(self.date_inputs[current_index].text()) == (4 if current_index == 0 else 2):
  291.             next_index = current_index + 1
  292.             if next_index < len(self.date_inputs):
  293.                 self.date_inputs[next_index].setFocus()
  294.      
  295.     def generate_names(self):
  296.         """生成姓名建议(已修复问题)"""
  297.         surname = self.surname_input.text().strip()
  298.         gender = "male" if self.male_radio.isChecked() else "female"
  299.          
  300.         # 获取日期输入
  301.         date_parts = []
  302.         for input_box in self.date_inputs:
  303.             text = input_box.text().strip()
  304.             if not text:
  305.                 self.show_names(["请完整输入出生日期"])
  306.                 return
  307.             date_parts.append(text)
  308.          
  309.         try:
  310.             # 构建日期字符串
  311.             date_str = f"{date_parts[0]}-{date_parts[1]}-{date_parts[2]} {date_parts[3]}:{date_parts[4]}:{date_parts[5]}"
  312.             birth_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
  313.         except ValueError as e:
  314.             self.show_names(["日期格式错误: " + str(e)])
  315.             return
  316.          
  317.         # 根据出生日期计算五行属性
  318.         month = birth_date.month
  319.         wuxing = self.calculate_wuxing(month)
  320.          
  321.         # 生成15个姓名
  322.         names = []
  323.         for _ in range(15):
  324.             # 根据性别选择字库
  325.             if random.random() > 0.5:
  326.                 # 从常用字库选择
  327.                 char = random.choice(self.male_characters if gender == "male" else self.female_characters)
  328.             else:
  329.                 # 从五行字库选择
  330.                 char = random.choice(self.wuxing_characters[wuxing][gender])
  331.             
  332.             # 随机选择1个字或2个字的名字
  333.             if random.random() > 0.5:
  334.                 name = surname + char
  335.             else:
  336.                 # 第二个字也从对应性别的字库选择
  337.                 char2 = random.choice(self.male_characters if gender == "male" else self.female_characters)
  338.                 name = surname + char + char2
  339.             
  340.             names.append(name)
  341.          
  342.         # 显示结果
  343.         self.show_names(names)
  344.      
  345.     def show_names(self, names):
  346.         """在3×5网格中显示姓名"""
  347.         for i in range(15):
  348.             if i < len(names):
  349.                 self.name_labels[i].setText(names[i])
  350.                 self.name_labels[i].setToolTip(f"点击复制: {names[i]}")
  351.             else:
  352.                 self.name_labels[i].setText("")
  353.                 self.name_labels[i].setToolTip("")
  354.      
  355.     def calculate_wuxing(self, month):
  356.         """计算五行属性"""
  357.         if month in [1, 2]:  # 冬季
  358.             return '水'
  359.         elif month in [3, 4, 5]:  # 春季
  360.             return '木'
  361.         elif month in [6, 7, 8]:  # 夏季
  362.             return '火'
  363.         elif month in [9, 10]:  # 秋季
  364.             return '金'
  365.         else:  # 晚秋冬季
  366.             return '土'

  367. if __name__ == "__main__":
  368.     app = QApplication(sys.argv)
  369.     window = NameGeneratorApp()
  370.     window.show()
  371.     sys.exit(app.exec_())
复制代码



蓝奏云:
https://wwpo.lanzoue.com/iX4Kl2rnn1if
密码:8i2s
科学家玩家 发表于 2025-3-26 22:56:37
现在AI出来之后,这种软件都只能用来自娱自乐了,拿来练练PyQt
柏舟不寐 发表于 2025-3-27 07:40:04
远古的起名软件,暴力的排序办法
任汾 发表于 2025-3-27 08:52:04
我有个更直接的方法,权且一听。无论是打算单姓还是父母姓组合,名字都可以去找古人的字、号,来做名字,保证又高雅又有典故。厉害点的可以模仿。
毕竟能够接触到的古人,无论是否来自教科书或者后来你读到的一些文章作品,能够著书立说且能流传至今,都不是一般人。他本人也许也不牛,但是祖上牛。或者他某一支的中兴人物,承前启后。
timlang 发表于 2025-4-4 20:31:54
你不如直接deepseek啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

虫部落 陕ICP备14001577号-1川公网安备 51019002003015号联系我们FAQ关于虫部落免责声明虫部落生存法则社区广场RSS

Build with for "make search easier" Copyright © 2013-2025. Powered by Discuz! GMT+8, 2025-5-2 06:27

快速回复 返回顶部 返回列表