多台控制

This commit is contained in:
ray
2025-10-30 23:39:27 +08:00
parent 069613fe09
commit 7623e22e5c
9 changed files with 350 additions and 190 deletions

View File

@@ -14,6 +14,7 @@ class ConfigGUI:
self.root.minsize(900, 600) # 设置最小尺寸
self.selected_index = 0
self.preview_thread = None # 添加预览线程引用
self.setup_ui()
self.load_current_config()
@@ -96,6 +97,24 @@ class ConfigGUI:
self.create_entry(preview_frame, "preview_height", "预览高度:", prefix="display")
self.create_entry(preview_frame, "preview_columns", "预览列数:", prefix="display")
self.create_entry(preview_frame, "preview_rows", "预览行数:", prefix="display")
# 多窗口预览开关
multi_row = ttk.Frame(preview_frame)
multi_row.pack(fill=tk.X, pady=3)
ttk.Label(multi_row, text="多窗口预览:", width=15).pack(side=tk.LEFT)
self.preview_multi_window_var = tk.BooleanVar(value=False)
multi_cb = ttk.Checkbutton(multi_row, variable=self.preview_multi_window_var)
multi_cb.pack(side=tk.LEFT, padx=5)
self.config_vars["display_preview_multi_window"] = self.preview_multi_window_var
# 预览全部配置组开关
all_row = ttk.Frame(preview_frame)
all_row.pack(fill=tk.X, pady=3)
ttk.Label(all_row, text="预览全部配置组:", width=15).pack(side=tk.LEFT)
self.preview_use_all_groups_var = tk.BooleanVar(value=True)
all_cb = ttk.Checkbutton(all_row, variable=self.preview_use_all_groups_var)
all_cb.pack(side=tk.LEFT, padx=5)
self.config_vars["display_preview_use_all_groups"] = self.preview_use_all_groups_var
# 保存按钮
save_frame = ttk.Frame(right_frame)
@@ -145,6 +164,12 @@ class ConfigGUI:
for key in ['preview_width', 'preview_height', 'preview_columns', 'preview_rows']:
if key in display:
self.config_vars[f"display_{key}"].set(str(display[key]))
# 多窗口预览
if 'preview_multi_window' in display:
self.preview_multi_window_var.set(bool(display['preview_multi_window']))
# 预览全部配置组
if 'preview_use_all_groups' in display:
self.preview_use_all_groups_var.set(bool(display['preview_use_all_groups']))
# 初次自动扫描一次采集卡和串口
try:
self.scan_cameras()
@@ -384,6 +409,10 @@ class ConfigGUI:
display[key] = int(var.get())
except:
pass
# 保存多窗口预览布尔值
display['preview_multi_window'] = bool(self.preview_multi_window_var.get())
# 保存预览全部配置组布尔值
display['preview_use_all_groups'] = bool(self.preview_use_all_groups_var.get())
config_manager.config['display'] = display
# 保存到文件
@@ -397,20 +426,13 @@ class ConfigGUI:
return False
def start_preview(self):
"""启动预览窗口"""
# 保存配置(不显示消息框,静默保存)
"""启动预览窗口(主线程,弹窗模式)"""
if not self.save_config_silent():
messagebox.showerror("错误", "配置保存失败,无法启动预览")
return
# 重新加载配置(从文件读取最新配置)
config_manager.load_config()
# 启动预览窗口
from preview import PreviewWindow
preview_thread = threading.Thread(target=lambda: PreviewWindow().run())
preview_thread.daemon = True
preview_thread.start()
PreviewWindow().run(self.root) # 以主窗口为父Toplevel弹出独立预览窗
def save_config_silent(self):
"""静默保存配置(不显示消息框)"""
@@ -462,6 +484,10 @@ class ConfigGUI:
display[key] = int(var.get())
except:
pass
# 保存多窗口预览布尔值(静默)
display['preview_multi_window'] = bool(self.preview_multi_window_var.get())
# 保存预览全部配置组布尔值(静默)
display['preview_use_all_groups'] = bool(self.preview_use_all_groups_var.get())
config_manager.config['display'] = display
# 保存到文件