From 78d95376bac81ed723d5aa0d9e70f2fca4e7aec6 Mon Sep 17 00:00:00 2001 From: wangbo Date: Fri, 10 Oct 2025 08:02:48 +0000 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=B7=A5=E5=85=B7:1.?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=87=8F=E7=A8=8B=E5=8F=AF=E4=BB=A5=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E4=B8=8B=E6=8B=89=E6=A1=86=E8=AE=BE=E7=BD=AE;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- device-tool/pages/waveform_page.py | 90 ++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 12 deletions(-) diff --git a/device-tool/pages/waveform_page.py b/device-tool/pages/waveform_page.py index 541d250..7eb92f6 100755 --- a/device-tool/pages/waveform_page.py +++ b/device-tool/pages/waveform_page.py @@ -30,10 +30,14 @@ class WaveformPage(BasePage): self.sample_duration = 2.0 self.time_axis = np.linspace(0, self.sample_duration, self.sample_points) + # 量程选项 + self.range_options = [200, 500, 1000, 2000] + self.current_range = 1000 # 默认1000mV + # 纵轴配置 - self.y_min = -1000 - self.y_max = 1000 - self.y_precision = 200 + self.y_min = -self.current_range + self.y_max = self.current_range + self.y_precision = self.current_range // 5 # 每大格为量程的1/5 # 通道配置 self.channels = list(range(1, 9)) @@ -42,6 +46,9 @@ class WaveformPage(BasePage): # 当前选中的通道 self.selected_channel = tk.IntVar(value=1) # 默认选择通道1 self.previous_channel = 1 # 记录上一个通道 + + # 量程选择 + self.selected_range = tk.StringVar(value="1000mV") # 默认选择1000mV # 波形开启开关 self.wave_enabled = False @@ -61,9 +68,13 @@ class WaveformPage(BasePage): control_frame = ttk.LabelFrame(main_frame, text="控制面板", padding=10) control_frame.pack(fill=tk.X, pady=5) + # 第一行:通道选择和量程选择 + top_frame = ttk.Frame(control_frame) + top_frame.pack(fill=tk.X, pady=5) + # 通道选择 - channel_frame = ttk.Frame(control_frame) - channel_frame.pack(fill=tk.X, pady=5) + channel_frame = ttk.Frame(top_frame) + channel_frame.pack(side=tk.LEFT, padx=(0, 20)) ttk.Label(channel_frame, text="通道选择:").pack(side=tk.LEFT, padx=(0, 10)) @@ -78,11 +89,28 @@ class WaveformPage(BasePage): # 绑定选择事件 channel_combo.bind('<>', self.on_channel_selected) + # 量程选择 + range_frame = ttk.Frame(top_frame) + range_frame.pack(side=tk.LEFT) + + ttk.Label(range_frame, text="量程选择:").pack(side=tk.LEFT, padx=(0, 10)) + + # 创建量程选择下拉框 + range_combo = ttk.Combobox(range_frame, + textvariable=self.selected_range, + values=["200mV", "500mV", "1000mV", "2000mV"], + state="readonly", + width=10) + range_combo.pack(side=tk.LEFT, padx=5) + + # 绑定量程选择事件 + range_combo.bind('<>', self.on_range_selected) + # 通道信息显示 self.channel_info_var = tk.StringVar(value="当前通道: 1") - ttk.Label(channel_frame, textvariable=self.channel_info_var).pack(side=tk.LEFT, padx=(20, 0)) + ttk.Label(top_frame, textvariable=self.channel_info_var).pack(side=tk.RIGHT, padx=(20, 0)) - # 控制按钮 + # 第二行:控制按钮 button_frame = ttk.Frame(control_frame) button_frame.pack(fill=tk.X, pady=5) @@ -103,6 +131,43 @@ class WaveformPage(BasePage): self.setup_plot(plot_frame) self.setup_udp() + def on_range_selected(self, event=None): + """量程选择变化时的回调函数""" + range_str = self.selected_range.get() + # 从字符串中提取数字部分 + new_range = int(range_str.replace("mV", "")) + + if new_range != self.current_range: + print(f"切换量程: {self.current_range}mV -> {new_range}mV") + self.current_range = new_range + + # 更新纵轴配置 + self.y_min = -self.current_range + self.y_max = self.current_range + self.y_precision = self.current_range // 5 # 每大格为量程的1/5 + + # 更新坐标轴显示 + self.update_plot_scale() + + # 更新状态显示 + self.status_var.set(f"量程已切换到 {new_range}mV") + + def update_plot_scale(self): + """更新坐标轴刻度""" + if hasattr(self, 'ax'): + # 更新纵轴范围 + self.ax.set_ylim(self.y_min, self.y_max) + + # 更新纵轴刻度 + y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision) + y_minor_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision // 4) # 每小格为量程的1/20 + + self.ax.set_yticks(y_major_ticks) + self.ax.set_yticks(y_minor_ticks, minor=True) + + # 重绘画布 + self.canvas.draw_idle() + def on_channel_selected(self, event=None): """通道选择变化时的回调函数""" new_channel = self.selected_channel.get() @@ -142,7 +207,7 @@ class WaveformPage(BasePage): # 设置坐标轴标签 self.ax.set_xlabel('Time (us)') - self.ax.set_ylabel('Amplitude(mV)') + self.ax.set_ylabel('Amplitude (mV)') self.ax.set_title('Real-time Waveform Display') # 设置坐标轴范围 @@ -156,8 +221,8 @@ class WaveformPage(BasePage): x_minor_ticks = np.arange(0, self.sample_duration + 0.05, 0.05) # 纵轴刻度 - y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision) # 每10mV主刻度 - y_minor_ticks = np.arange(self.y_min, self.y_max + 1, 50) # 每2mV次刻度 + y_major_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision) + y_minor_ticks = np.arange(self.y_min, self.y_max + 1, self.y_precision // 4) # 每小格为量程的1/20 self.ax.set_xticks(x_major_ticks) self.ax.set_xticks(x_minor_ticks, minor=True) @@ -167,7 +232,7 @@ class WaveformPage(BasePage): # 设置网格线 # 主网格线:0.1us间隔,颜色较深 self.ax.grid(True, which='major', alpha=0.4, linestyle='-', linewidth=0.8) - # 次网格线:0.05us间隔和2mV间隔,颜色较浅 + # 次网格线:0.05us间隔和纵轴小刻度间隔,颜色较浅 self.ax.grid(True, which='minor', alpha=0.2, linestyle='--', linewidth=0.5) # 创建画布 @@ -184,6 +249,7 @@ class WaveformPage(BasePage): # 添加图例 self.ax.legend(loc='upper right') + # 其他方法保持不变... def setup_udp(self): """设置UDP socket""" try: @@ -438,7 +504,7 @@ class WaveformPage(BasePage): self.show_info("波形地址设置成功") self.start_udp() else: - elf.show_info("波形地址设置成功") + self.show_info("波形地址设置成功") self.stop_udp() def ip_to_int(self, ip):