Files
diskmanager2/main.py
2026-02-10 02:54:13 +08:00

132 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Linux 存储管理器 - 统一入口 (Tkinter 版本)
统一使用 Tkinter GUI 后端
支持 Arch Linux 和 CentOS/RHEL 8
"""
import sys
import os
import logging
# 确保可以导入本地模块
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from platform_compat import check_prerequisites
def setup_logging():
"""配置日志"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
def show_error_dialog(title, message):
"""显示错误对话框"""
print(f"\n{'='*60}")
print(f"错误: {title}")
print(f"{'='*60}")
print(message)
print(f"{'='*60}\n")
# 使用 tkinter 显示图形错误对话框
try:
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.withdraw()
messagebox.showerror(title, message)
root.destroy()
except Exception:
pass
def get_installation_guide():
"""获取安装指南"""
return """安装指南:
Arch Linux:
sudo pacman -S python python-tkinter parted mdadm lvm2
sudo pacman -S dosfstools e2fsprogs xfsprogs ntfs-3g
pip3 install pexpect
CentOS 8 / RHEL 8:
sudo yum install -y python3 python3-tkinter parted mdadm lvm2
sudo yum install -y dosfstools e2fsprogs xfsprogs ntfs-3g
pip3 install pexpect
"""
def main():
"""主入口函数"""
setup_logging()
logger = logging.getLogger(__name__)
logger.info("="*60)
logger.info("Linux 存储管理器启动 (Tkinter)")
logger.info("="*60)
# 检查 tkinter 是否可用
try:
import tkinter as tk
logger.info("Tkinter 已加载")
except ImportError as e:
show_error_dialog(
"启动失败",
f"无法加载 Tkinter: {e}\n\n"
"请安装 tkinter:\n"
" CentOS 8: sudo yum install python3-tkinter\n"
" Arch Linux: sudo pacman -S tk\n"
)
sys.exit(1)
# 检查前提条件
passed, errors, warnings = check_prerequisites()
if not passed:
error_msg = "系统缺少必要的依赖:\n\n"
for e in errors:
error_msg += f"{e}\n"
error_msg += "\n" + get_installation_guide()
show_error_dialog("启动失败", error_msg)
sys.exit(1)
# 显示警告
for w in warnings:
logger.warning(w)
logger.info("启动 Tkinter 主窗口")
try:
# 统一使用 Tkinter 版本
from mainwindow_tkinter import MainWindow
root = tk.Tk()
app = MainWindow(root)
root.mainloop()
except ImportError as e:
logger.exception("导入模块失败")
show_error_dialog(
"启动失败",
f"无法加载 GUI 模块: {e}\n\n"
"请检查依赖是否正确安装。\n\n" +
get_installation_guide()
)
sys.exit(1)
except Exception as e:
logger.exception("启动过程中发生错误")
show_error_dialog("启动失败", f"发生错误: {e}")
sys.exit(1)
if __name__ == "__main__":
main()