You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
4.0 KiB
Python

import tkinter as tk
from tkinter import ttk, messagebox
from config import DEFAULT_DEVICE_IP, DEFAULT_DEVICE_PORT
from pages.device_info import DeviceInfoPage
from pages.global_params import GlobalParamsPage
from pages.port_params import PortParamsPage
from pages.upgrade import UpgradePage
from pages.status_page import StatusPage
from pages.waveform_page import WaveformPage
from tcp_client import TCPClient
class DeviceTool:
def __init__(self):
self.root = tk.Tk()
self.root.title("设备配置工具")
self.root.geometry("800x600")
self.tcp_client = TCPClient(DEFAULT_DEVICE_IP, DEFAULT_DEVICE_PORT)
self.is_connected = False # 添加连接状态标志
self.create_widgets()
def create_widgets(self):
# 连接控制栏
conn_frame = ttk.Frame(self.root)
conn_frame.pack(fill=tk.X, padx=10, pady=5)
ttk.Label(conn_frame, text="IP:").pack(side=tk.LEFT)
self.ip_var = tk.StringVar(value=DEFAULT_DEVICE_IP)
ttk.Entry(conn_frame, textvariable=self.ip_var, width=15).pack(side=tk.LEFT, padx=5)
ttk.Label(conn_frame, text="端口:").pack(side=tk.LEFT)
self.port_var = tk.IntVar(value=DEFAULT_DEVICE_PORT)
ttk.Entry(conn_frame, textvariable=self.port_var, width=8).pack(side=tk.LEFT, padx=5)
# 使用单个按钮代替连接和断开按钮
self.conn_button = ttk.Button(conn_frame, text="连接", command=self.toggle_connection)
self.conn_button.pack(side=tk.LEFT, padx=5)
# 状态显示
self.status_label = ttk.Label(conn_frame, text="状态: 未连接", foreground="red")
self.status_label.pack(side=tk.LEFT, padx=10)
# 选项卡
self.notebook = ttk.Notebook(self.root)
self.notebook.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
# 添加页面
self.device_info_page = DeviceInfoPage(self.notebook, self.tcp_client)
self.notebook.add(self.device_info_page, text="设备信息")
self.global_params_page = GlobalParamsPage(self.notebook, self.tcp_client)
self.notebook.add(self.global_params_page, text="全局配置")
self.port_params_page = PortParamsPage(self.notebook, self.tcp_client)
self.notebook.add(self.port_params_page, text="通道配置")
self.upgrade = UpgradePage(self.notebook, self.tcp_client)
self.notebook.add(self.upgrade, text="固件升级")
self.status_page = StatusPage(self.notebook, self.tcp_client)
self.notebook.add(self.status_page, text="实时状态")
self.waveform_page = WaveformPage(self.notebook, self.tcp_client)
self.notebook.add(self.waveform_page, text="实时波形")
# 可以继续添加其他页面...
def toggle_connection(self):
"""切换连接状态"""
if not self.is_connected:
self.connect()
else:
self.disconnect()
def connect(self):
# 获取当前输入框中的 IP 和端口
current_ip = self.ip_var.get()
current_port = self.port_var.get()
# 更新 TCPClient 的连接参数
self.tcp_client.host = current_ip
self.tcp_client.port = current_port
if self.tcp_client.connect():
self.is_connected = True
self.conn_button.config(text="断开")
self.status_label.config(text="状态: 已连接", foreground="green")
messagebox.showinfo("成功", "连接成功")
else:
messagebox.showerror("错误", "连接失败")
def disconnect(self):
self.tcp_client.disconnect()
self.is_connected = False
self.conn_button.config(text="连接")
self.status_label.config(text="状态: 未连接", foreground="red")
messagebox.showinfo("成功", "已断开连接")
def run(self):
self.root.mainloop()
if __name__ == "__main__":
app = DeviceTool()
app.run()