大家好,自己用Python + PyQt6写了个本地族谱管理工具,可以管理家族成员、血缘关系、生成族谱树、导出PDF族谱。
软件功能一览
- 多用户登录,管理员可增删用户,操作日志追踪
- 多家族管理,一键切换,数据独立
- 成员信息:姓名、曾用名、性别、生卒、籍贯、职业、学历、照片
- 关系绑定:父母、配偶,子女按性别独立排行
- 族谱树:从任意成员展开上下五代,节点显示姓名、世代、排行,可保存图片
- 血缘查询:两人关系判定(父子、祖孙、兄弟姐妹等),查询祖先/后代/同辈
- 统计信息:总人数、男女比、在世/已故、出生地/姓氏分布
- 事件传记:记录成员升学、参军、结婚等大事
- 姓氏/村庄简介:自由编辑保存
- **导入导出**:导出Excel名单、PDF排版族谱,数据库备份恢复
软件本地运行,数据安全,完全免费用。代码结构清晰,适合二次开发。如有问题欢迎留言交流,我尽量回复。
下载链接:https://pan.baidu.com/s/1TgOnt7ZnV7jf4afvcFe70Q?pwd=52pj 提取码: 52pj
默认登录密码:admin
1.数据库设计(SQLite,关系表支持按性别独立排序)
[Python] 纯文本查看 复制代码 CREATE TABLE IF NOT EXISTS persons ( id INTEGER PRIMARY KEY AUTOINCREMENT,
family_id INTEGER DEFAULT 1,
name TEXT NOT NULL,
former_name TEXT DEFAULT '',
gender TEXT, birth_date TEXT, death_date TEXT,
birthplace TEXT, occupation TEXT, education TEXT, notes TEXT,
photo BLOB, generation INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS relationships (
id INTEGER PRIMARY KEY AUTOINCREMENT,
person_id INTEGER NOT NULL,
related_id INTEGER NOT NULL,
rel_type TEXT NOT NULL, -- 'father', 'mother', 'spouse'
sort_order INTEGER DEFAULT 0 -- 同性别的排行
);
2.族谱树调用Graphviz生成图片(使用dot命令,支持中文)
[Python] 纯文本查看 复制代码 import subprocess, tempfile, os
def generate_tree_png(nodes, edges):
tmp_dir = tempfile.mkdtemp()
lines = ['digraph G {']
lines.append('node [fontname="SimHei", shape=box];')
for pid, info in nodes.items():
name = info['name']
gen = info['generation']
rank = info.get('rank_title', '') # 如“长子”
label = f"{name}\\n第{gen}代\\n{rank}"
lines.append(f'{pid} [label="{label}"];')
for e in edges:
lines.append(f'{e[0]} -> {e[1]};')
lines.append('}')
dot_source = '\n'.join(lines)
dot_file = os.path.join(tmp_dir, 'tree.dot')
png_file = os.path.join(tmp_dir, 'tree.png')
with open(dot_file, 'w', encoding='utf-8') as f:
f.write(dot_source)
subprocess.run(['dot', '-Tpng', dot_file, '-o', png_file], check=True)
return png_file |