#!/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()