132 lines
3.2 KiB
Python
Executable File
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()
|