Files
dtm-py-all/UI/example_backend_with_gui.py

111 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
示例:后台主程序如何启动 GUI
将此文件放在后台工程根目录,作为参考
"""
import subprocess
import sys
import os
class GUIManager:
"""GUI 进程管理器"""
def __init__(self, api_host='127.0.0.1', api_port=5050):
self.api_host = api_host
self.api_port = api_port
self.gui_process = None
def start_gui(self):
"""启动 GUI 前端"""
gui_script = os.path.join(
os.path.dirname(__file__),
'frontend_gui',
'launch_gui.py'
)
if not os.path.exists(gui_script):
print(f"错误: GUI 启动脚本不存在: {gui_script}")
return False
print(f"启动 GUI 前端...")
print(f" API 地址: http://{self.api_host}:{self.api_port}")
try:
self.gui_process = subprocess.Popen(
[
sys.executable,
gui_script,
'--api-host', self.api_host,
'--api-port', str(self.api_port),
'--debug'
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=os.path.dirname(os.path.abspath(__file__))
)
print(f"GUI 进程已启动PID: {self.gui_process.pid}")
return True
except Exception as e:
print(f"启动 GUI 失败: {e}")
return False
def stop_gui(self):
"""停止 GUI 进程"""
if self.gui_process:
print("正在关闭 GUI...")
self.gui_process.terminate()
try:
self.gui_process.wait(timeout=5)
print("GUI 已关闭")
except subprocess.TimeoutExpired:
print("GUI 未响应,强制关闭")
self.gui_process.kill()
self.gui_process.wait()
def is_running(self):
"""检查 GUI 是否运行"""
if self.gui_process:
return self.gui_process.poll() is None
return False
def main():
"""示例:在后台程序中集成 GUI 启动"""
print("=== 后台主程序示例 ===")
# 1. 启动后台服务(这里省略,实际应该启动 Flask 等)
print("1. 后台服务启动...")
# 2. 创建 GUI 管理器并启动 GUI
gui_manager = GUIManager(api_host='127.0.0.1', api_port=5050)
if gui_manager.start_gui():
print("2. GUI 前端已启动")
else:
print("2. GUI 前端启动失败")
return
# 3. 等待用户操作
try:
print("\n系统运行中,按 Ctrl+C 退出...\n")
while gui_manager.is_running():
import time
time.sleep(1)
print("GUI 已退出")
except KeyboardInterrupt:
print("\n收到退出信号")
finally:
# 4. 清理
gui_manager.stop_gui()
print("后台服务关闭")
if __name__ == '__main__':
main()