这是在xx破解逛 的时候看到的
- import sys
- import random
- from PyQt5.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QWidget,
- QLabel, QLineEdit, QPushButton, QHBoxLayout,
- QGridLayout, QGroupBox, QRadioButton, QButtonGroup)
- from PyQt5.QtCore import Qt, QRegExp
- from PyQt5.QtGui import QRegExpValidator, QFont
- from datetime import datetime
-
- class NameGeneratorApp(QMainWindow):
- def __init__(self):
- super().__init__()
- self.setWindowTitle("小孩取名助手")
- self.setGeometry(100, 100, 800, 600)
-
- # 初始化UI
- self.init_ui()
-
- # 男性常用字库
- self.male_characters = [
- '伟', '强', '磊', '洋', '勇', '军', '杰', '涛', '浩', '宇',
- '轩', '睿', '泽', '博', '文', '晨', '然', '昊', '明', '安',
- '柏', '彬', '斌', '冰', '波', '超', '诚', '春', '聪', '德',
- '东', '栋', '凡', '飞', '风', '峰', '刚', '光', '国', '海',
- '晗', '汉', '翰', '航', '豪', '昊', '浩', '和', '宏', '洪',
- '华', '辉', '佳', '家', '建', '健', '剑', '江', '金', '晋',
- '京', '景', '靖', '敬', '君', '俊', '峻', '骏', '凯', '康',
- '坤', '朗', '乐', '雷', '磊', '黎', '力', '立', '良', '亮',
- '林', '龙', '伦', '仑', '茂', '民', '明', '铭', '鸣', '墨',
- '楠', '宁', '鹏', '平', '奇', '琦', '祺', '谦', '强', '青',
- '清', '庆', '秋', '然', '仁', '荣', '瑞', '睿', '润', '森',
- '山', '善', '尚', '绍', '升', '生', '晟', '盛', '石', '世',
- '书', '树', '思', '松', '嵩', '涛', '天', '庭', '通', '同',
- '拓', '威', '伟', '玮', '炜', '文', '武', '熙', '熹', '曦',
- '先', '贤', '祥', '翔', '晓', '孝', '心', '昕', '新', '信',
- '星', '雄', '秀', '旭', '轩', '学', '勋', '岩', '彦', '扬',
- '阳', '洋', '尧', '耀', '烨', '一', '毅', '英', '勇', '友',
- '瑜', '宇', '羽', '雨', '禹', '玉', '钰', '元', '源', '远',
- '岳', '云', '运', '泽', '展', '章', '昭', '哲', '真', '振',
- '正', '政', '志', '智', '中', '忠', '钟', '洲', '周', '竹',
- '卓', '子', '梓', '宗', '祖', '尊', '佐', '作', '祚', '安'
- ]
-
- # 女性常用字库
- self.female_characters = [
- '婷', '敏', '静', '丽', '娟', '芳', '燕', '娜', '玲', '怡',
- '雅', '欣', '雨', '诗', '思', '嘉', '梦', '琪', '萱', '宁',
- '婵', '丹', '菲', '凤', '歌', '惠', '蕙', '娇', '洁', '婕',
- '瑾', '晶', '娟', '兰', '岚', '莉', '丽', '莲', '琳', '玲',
- '璐', '蔓', '梅', '美', '萌', '梦', '密', '苗', '妙', '敏',
- '茗', '娜', '妮', '凝', '萍', '琪', '倩', '琴', '晴', '琼',
- '秋', '蓉', '蕊', '芮', '瑞', '睿', '若', '莎', '珊', '善',
- '诗', '书', '舒', '淑', '姝', '爽', '思', '斯', '素', '棠',
- '婷', '彤', '婉', '薇', '雯', '妩', '西', '希', '霞', '仙',
- '娴', '香', '晓', '笑', '欣', '馨', '秀', '旭', '萱', '雪',
- '雅', '娅', '嫣', '妍', '艳', '燕', '阳', '瑶', '曜', '冶',
- '野', '烨', '伊', '衣', '依', '仪', '怡', '宜', '颐', '艺',
- '忆', '亦', '易', '懿', '茵', '音', '吟', '英', '莺', '樱',
- '莹', '滢', '颖', '影', '雍', '悠', '瑜', '雨', '语', '玉',
- '钰', '郁', '昱', '煜', '园', '媛', '月', '玥', '悦', '云',
- '芸', '韵', '蕴', '泽', '昭', '珍', '真', '臻', '贞', '筝',
- '芝', '枝', '芷', '珠', '竹', '庄', '姿', '子', '梓', '紫'
- ]
-
- # 五行字库(按性别区分)
- self.wuxing_characters = {
- '金': {
- 'male': ['鑫', '铭', '锋', '锦', '钰', '钧', '锐', '钢', '钟', '钱'],
- 'female': ['钰', '铃', '银', '钗', '钏', '铢', '镘', '钤', '钿', '锳']
- },
- '木': {
- 'male': ['林', '森', '楠', '桐', '楷', '枫', '柏', '松', '柳', '杨'],
- 'female': ['柳', '梅', '桃', '杏', '樱', '桂', '榕', '桦', '柠', '檬']
- },
- '水': {
- 'male': ['涵', '浩', '泽', '涛', '洋', '海', '江', '河', '湖', '溪'],
- 'female': ['沐', '汐', '沁', '湄', '涓', '涟', '漪', '滟', '潇', '澜']
- },
- '火': {
- 'male': ['炎', '煜', '煊', '灿', '灵', '炜', '烨', '熠', '炫', '炯'],
- 'female': ['灵', '灿', '烟', '煠', '焓', '煖', '焮', '煣', '熳', '熠']
- },
- '土': {
- 'male': ['坤', '城', '培', '基', '垣', '坦', '垚', '垠', '垲', '垌'],
- 'female': ['培', '垠', '垲', '埴', '堇', '堉', '堋', '堍', '堎', '堞']
- }
- }
-
- def init_ui(self):
- # 主窗口部件
- central_widget = QWidget()
- self.setCentralWidget(central_widget)
-
- # 主布局
- main_layout = QVBoxLayout()
- main_layout.setSpacing(15) # 整体垂直间距
- central_widget.setLayout(main_layout)
-
- # ===== 第一板块:基本信息 =====
- info_group = QGroupBox()
- info_group.setTitle("基本信息")
- info_group.setAlignment(Qt.AlignCenter)
- info_group.setStyleSheet("""
- QGroupBox {
- font-size: 14px;
- font-weight: bold;
- border: 1px solid silver;
- margin-top: 10px;
- }
- QGroupBox::title {
- subcontrol-origin: margin;
- left: 10px;
- }
- """)
-
- info_layout = QHBoxLayout()
- info_layout.setSpacing(15) # 内部组件间距
- info_layout.setContentsMargins(20, 15, 20, 15) # 边距
-
- # 姓氏输入
- surname_layout = QHBoxLayout()
- surname_layout.setSpacing(5)
- surname_label = QLabel("姓氏:")
- surname_label.setStyleSheet("font-size: 13px;")
- self.surname_input = QLineEdit()
- self.surname_input.setFixedWidth(120)
- self.surname_input.setStyleSheet("font-size: 13px;")
- surname_layout.addWidget(surname_label)
- surname_layout.addWidget(self.surname_input, alignment=Qt.AlignLeft)
-
- # 性别选择
- gender_layout = QHBoxLayout()
- gender_layout.setSpacing(5)
- gender_label = QLabel("性别:")
- gender_label.setStyleSheet("font-size: 13px;")
-
- self.gender_group = QButtonGroup()
- self.male_radio = QRadioButton("男")
- self.male_radio.setStyleSheet("font-size: 13px;")
- self.female_radio = QRadioButton("女")
- self.female_radio.setStyleSheet("font-size: 13px;")
- self.male_radio.setChecked(True)
-
- self.gender_group.addButton(self.male_radio)
- self.gender_group.addButton(self.female_radio)
-
- gender_radio_layout = QHBoxLayout()
- gender_radio_layout.setSpacing(10)
- gender_radio_layout.addWidget(self.male_radio)
- gender_radio_layout.addWidget(self.female_radio)
-
- gender_layout.addWidget(gender_label)
- gender_layout.addLayout(gender_radio_layout)
-
- info_layout.addLayout(surname_layout)
- info_layout.addLayout(gender_layout)
- info_group.setLayout(info_layout)
- main_layout.addWidget(info_group, alignment=Qt.AlignCenter)
-
- # ===== 第二板块:出生日期 =====
- date_group = QGroupBox()
- date_group.setTitle("出生日期")
- date_group.setAlignment(Qt.AlignCenter)
- date_group.setStyleSheet("""
- QGroupBox {
- font-size: 14px;
- font-weight: bold;
- border: 1px solid silver;
- margin-top: 5px;
- }
- QGroupBox::title {
- subcontrol-origin: margin;
- left: 10px;
- }
- """)
-
- date_layout = QHBoxLayout()
- date_layout.setSpacing(8) # 日期组件间距
- date_layout.setContentsMargins(20, 15, 20, 15)
-
- # 创建年月日时分秒输入框
- self.date_inputs = []
- date_labels = ["年", "月", "日", "时", "分", "秒"]
- for label in date_labels:
- hbox = QHBoxLayout()
- hbox.setSpacing(2)
-
- input_box = QLineEdit()
- input_box.setFixedWidth(45 if label == "年" else 30)
- input_box.setAlignment(Qt.AlignCenter)
- input_box.setStyleSheet("font-size: 13px;")
-
- # 设置验证器(只能输入数字)
- validator = QRegExpValidator(QRegExp("[0-9]+"))
- input_box.setValidator(validator)
-
- # 连接跳转信号
- if label != "秒":
- input_box.textEdited.connect(lambda text, i=len(self.date_inputs): self.focus_next_input(i))
-
- hbox.addWidget(input_box)
- hbox.addWidget(QLabel(label))
-
- date_layout.addLayout(hbox)
- self.date_inputs.append(input_box)
-
- date_group.setLayout(date_layout)
- main_layout.addWidget(date_group, alignment=Qt.AlignCenter)
-
- # ===== 第三板块:姓名建议 =====
- name_group = QGroupBox()
- name_group.setTitle("姓名建议")
- name_group.setAlignment(Qt.AlignCenter)
- name_group.setStyleSheet("""
- QGroupBox {
- font-size: 14px;
- font-weight: bold;
- border: 1px solid silver;
- margin-top: 5px;
- }
- QGroupBox::title {
- subcontrol-origin: margin;
- left: 10px;
- }
- """)
-
- name_layout = QGridLayout()
- name_layout.setHorizontalSpacing(8) # 网格水平间距
- name_layout.setVerticalSpacing(8) # 网格垂直间距
- name_layout.setContentsMargins(15, 15, 15, 15)
-
- # 创建3行5列的姓名显示标签
- self.name_labels = []
- for row in range(3):
- for col in range(5):
- label = QLabel("")
- label.setAlignment(Qt.AlignCenter)
- label.setStyleSheet("""
- border: 1px solid gray;
- padding: 2px;
- background-color: #f0f0f0;
- min-width: 70px;
- min-height: 25px;
- font-size: 13px;
- """)
- label.setCursor(Qt.PointingHandCursor)
- label.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard)
-
- name_layout.addWidget(label, row, col)
- self.name_labels.append(label)
-
- name_group.setLayout(name_layout)
- main_layout.addWidget(name_group, alignment=Qt.AlignCenter)
-
- # 按钮布局
- button_layout = QHBoxLayout()
- button_layout.setSpacing(20)
- button_layout.setContentsMargins(0, 10, 0, 10)
-
- # 生成按钮
- generate_button = QPushButton("生成姓名")
- generate_button.setStyleSheet("""
- QPushButton {
- padding: 6px;
- font-size: 13px;
- min-width: 90px;
- }
- """)
- generate_button.clicked.connect(self.generate_names)
- button_layout.addWidget(generate_button)
-
- # 刷新按钮
- refresh_button = QPushButton("刷新")
- refresh_button.setStyleSheet("""
- QPushButton {
- padding: 6px;
- font-size: 13px;
- min-width: 90px;
- }
- """)
- refresh_button.clicked.connect(self.generate_names)
- button_layout.addWidget(refresh_button)
-
- button_layout.setAlignment(Qt.AlignCenter)
- main_layout.addLayout(button_layout)
-
- # 添加弹性空间使内容居中
- main_layout.addStretch(1)
-
- def focus_next_input(self, current_index):
- """自动跳转到下一个输入框"""
- if len(self.date_inputs[current_index].text()) == (4 if current_index == 0 else 2):
- next_index = current_index + 1
- if next_index < len(self.date_inputs):
- self.date_inputs[next_index].setFocus()
-
- def generate_names(self):
- """生成姓名建议(已修复问题)"""
- surname = self.surname_input.text().strip()
- gender = "male" if self.male_radio.isChecked() else "female"
-
- # 获取日期输入
- date_parts = []
- for input_box in self.date_inputs:
- text = input_box.text().strip()
- if not text:
- self.show_names(["请完整输入出生日期"])
- return
- date_parts.append(text)
-
- try:
- # 构建日期字符串
- date_str = f"{date_parts[0]}-{date_parts[1]}-{date_parts[2]} {date_parts[3]}:{date_parts[4]}:{date_parts[5]}"
- birth_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
- except ValueError as e:
- self.show_names(["日期格式错误: " + str(e)])
- return
-
- # 根据出生日期计算五行属性
- month = birth_date.month
- wuxing = self.calculate_wuxing(month)
-
- # 生成15个姓名
- names = []
- for _ in range(15):
- # 根据性别选择字库
- if random.random() > 0.5:
- # 从常用字库选择
- char = random.choice(self.male_characters if gender == "male" else self.female_characters)
- else:
- # 从五行字库选择
- char = random.choice(self.wuxing_characters[wuxing][gender])
-
- # 随机选择1个字或2个字的名字
- if random.random() > 0.5:
- name = surname + char
- else:
- # 第二个字也从对应性别的字库选择
- char2 = random.choice(self.male_characters if gender == "male" else self.female_characters)
- name = surname + char + char2
-
- names.append(name)
-
- # 显示结果
- self.show_names(names)
-
- def show_names(self, names):
- """在3×5网格中显示姓名"""
- for i in range(15):
- if i < len(names):
- self.name_labels[i].setText(names[i])
- self.name_labels[i].setToolTip(f"点击复制: {names[i]}")
- else:
- self.name_labels[i].setText("")
- self.name_labels[i].setToolTip("")
-
- def calculate_wuxing(self, month):
- """计算五行属性"""
- if month in [1, 2]: # 冬季
- return '水'
- elif month in [3, 4, 5]: # 春季
- return '木'
- elif month in [6, 7, 8]: # 夏季
- return '火'
- elif month in [9, 10]: # 秋季
- return '金'
- else: # 晚秋冬季
- return '土'
-
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = NameGeneratorApp()
- window.show()
- sys.exit(app.exec_())
复制代码
蓝奏云:
https://wwpo.lanzoue.com/iX4Kl2rnn1if
密码:8i2s |