Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-08 22:23:00 +08:00
commit 4e6636c509
1500 changed files with 275211 additions and 0 deletions

1
pages/__init__.py Normal file
View File

@@ -0,0 +1 @@
#

Binary file not shown.

Binary file not shown.

130
pages/status_page.py Normal file
View File

@@ -0,0 +1,130 @@
import os
import json
from PyQt6.QtWidgets import (QWidget, QHBoxLayout, QVBoxLayout,
QPushButton, QLabel, QFrame)
from PyQt6.QtCore import Qt, QTimer
def get_gcode_dir():
config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "config.json")
try:
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
return config.get("GCODE_DIR", "/home/lhye200/.octoprint/uploads")
except:
return "/home/lhye200/.octoprint/uploads"
GCODE_DIR = get_gcode_dir()
class StatusPage(QWidget):
def __init__(self, api_client, parent=None):
super().__init__(parent)
self.api_client = api_client
self.current_file = None
self.init_ui()
# 定时器刷新状态
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_status)
self.timer.start(2000)
self.update_status()
def init_ui(self):
main_layout = QHBoxLayout(self)
# --- 左侧:状态与控制 ---
self.left_frame = QFrame()
self.left_frame.setStyleSheet("background-color: #444444; border-radius: 10px;")
left_layout = QVBoxLayout(self.left_frame)
self.lbl_status = QLabel("状态: 未知")
self.lbl_status.setStyleSheet("color: white; font-size: 24px; border: none;")
self.lbl_job = QLabel("文件: 无")
self.lbl_job.setStyleSheet("color: white; font-size: 18px; border: none;")
self.lbl_progress = QLabel("进度: 0%")
self.lbl_progress.setStyleSheet("color: white; font-size: 18px; border: none;")
left_layout.addWidget(self.lbl_status)
left_layout.addWidget(self.lbl_job)
left_layout.addWidget(self.lbl_progress)
left_layout.addStretch()
btn_layout = QHBoxLayout()
self.btn_pause = QPushButton("暂停/恢复")
self.btn_pause.setStyleSheet(self.btn_style())
self.btn_pause.clicked.connect(self.toggle_pause)
self.btn_pause.setMinimumHeight(60)
self.btn_stop = QPushButton("停止")
self.btn_stop.setStyleSheet(self.btn_style())
self.btn_stop.clicked.connect(self.stop_print)
self.btn_stop.setMinimumHeight(60)
btn_layout.addWidget(self.btn_pause)
btn_layout.addWidget(self.btn_stop)
left_layout.addLayout(btn_layout)
# --- 右侧:预览 ---
self.right_frame = QFrame()
self.right_frame.setStyleSheet("background-color: #444444; border-radius: 10px;")
right_layout = QVBoxLayout(self.right_frame)
self.lbl_preview = QLabel("暂无预览...")
self.lbl_preview.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.lbl_preview.setStyleSheet("color: white; font-size: 18px; border: none;")
right_layout.addWidget(self.lbl_preview)
main_layout.addWidget(self.left_frame, 1)
main_layout.addWidget(self.right_frame, 1)
def btn_style(self):
return """
QPushButton {
background-color: #555555;
color: white;
border: 2px solid #666666;
border-radius: 5px;
font-size: 20px;
padding: 10px;
}
QPushButton:pressed {
background-color: #333333;
border: 2px solid #4CAF50;
}
"""
def toggle_pause(self):
self.api_client.pause_print()
def stop_print(self):
self.api_client.stop_print()
def update_status(self):
data = self.api_client.get_status()
if data:
status = data.get("status", {})
job = data.get("job", {})
state_str = status.get("state", {}).get("text", "离线")
self.lbl_status.setText(f"状态: {state_str}")
file_name_node = job.get("job", {}).get("file", {})
file_name = file_name_node.get("name") if file_name_node else ""
if not file_name:
file_name = ""
self.lbl_job.setText(f"文件: {file_name}")
progress_node = job.get("progress", {})
progress = progress_node.get("completion") if progress_node else 0
if progress is None: progress = 0
self.lbl_progress.setText(f"进度: {progress:.1f}%")
if file_name and file_name != "" and file_name != self.current_file:
self.current_file = file_name
self.render_preview(file_name)
def render_preview(self, filename):
filepath = os.path.join(GCODE_DIR, filename)
if not os.path.exists(filepath):
self.lbl_preview.setText(f"未找到对应的GCode文件:\n{filename}")
return
self.lbl_preview.setText(f"预览渲染成功:\n{filename}")