fix bug
This commit is contained in:
131
main.py
Executable file
131
main.py
Executable file
@@ -0,0 +1,131 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user