From 87bc21173f63bf97b77546ea17ddad44969419c6 Mon Sep 17 00:00:00 2001 From: SelfConfusion <1822250894@qq.com> Date: Sat, 13 Jul 2024 00:32:54 +0800 Subject: [PATCH] add some new function --- src/main.py | 187 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 165 insertions(+), 22 deletions(-) diff --git a/src/main.py b/src/main.py index 7290604..a2f7341 100644 --- a/src/main.py +++ b/src/main.py @@ -19,7 +19,7 @@ class App(ctk.CTk): gain_default = [1.30, 0.70, 1.10, 2.20, 0.50] gain_values = gain_default.copy() gain_values_store = gain_default.copy() - gain_enable = [True for i in range(5)] + gain_enable = [True for i in range(6)] system_platform = platform.system() def __init__(self) -> None: @@ -132,17 +132,90 @@ class App(ctk.CTk): slider.configure(state="normal") return None - def switchCorrection(i: int, slider: ctk.CTkSlider) -> None: - if self.gain_enable[i]: - self.gain_enable[i] = False + def switchCorrection( + i: int, + slider: Optional[ctk.CTkSlider] = None, + slider_1: Optional[ctk.CTkSlider] = None, + slider_2: Optional[ctk.CTkSlider] = None, + ) -> None: + def switchSign(i: int, is_open: bool) -> str: + match i: + case 0: # Color Correction 颜色矫正 + return "cmdbgo" if is_open else "cmdbcs" + case 3: # Gamma + return "cmdggo" if is_open else "cmdgcs" + case 4: # Saturation 饱和度 + return "cmdsgo" if is_open else "cmdscs" + case 5: # White Balance + return "cmdwgo" if is_open else "cmdwcs" + case _: + return "error" - slider.configure(button_color="grey") - slider.configure(state="disabled") + if i == 0: + if self.gain_enable[i]: + self.gain_enable[0] = False + self.gain_enable[1] = False + self.gain_enable[2] = False + + if self.serial_status: + self.serial.write((switchSign(i, False) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") + + slider.configure(button_color="grey") + slider.configure(state="disabled") + slider_1.configure(button_color="grey") + slider_1.configure(state="disabled") + slider_2.configure(button_color="grey") + slider_2.configure(state="disabled") + else: + self.gain_enable[0] = True + self.gain_enable[1] = True + self.gain_enable[2] = True + + if self.serial_status: + self.serial.write((switchSign(i, True) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") + + slider.configure(button_color="#1f538d") + slider.configure(state="normal") + slider_1.configure(button_color="#1f538d") + slider_1.configure(state="normal") + slider_2.configure(button_color="#1f538d") + slider_2.configure(state="normal") + elif i == 5: + if self.gain_enable[i]: + self.gain_enable[i] = False + if self.serial_status: + self.serial.write((switchSign(i, False) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") + else: + self.gain_enable[i] = True + if self.serial_status: + self.serial.write((switchSign(i, True) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") else: - self.gain_enable[i] = True + if self.gain_enable[i]: + self.gain_enable[i] = False + if self.serial_status: + self.serial.write((switchSign(i, False) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") - slider.configure(button_color="#1f538d") - slider.configure(state="normal") + slider.configure(button_color="grey") + slider.configure(state="disabled") + else: + self.gain_enable[i] = True + if self.serial_status: + self.serial.write((switchSign(i, True) + "ed").encode()) + else: + messagebox.showError("Please Connect to Serial") + + slider.configure(button_color="#1f538d") + slider.configure(state="normal") return None text = [ @@ -167,6 +240,9 @@ class App(ctk.CTk): data_frame.columnconfigure(0, weight=10) data_frame.columnconfigure(1, weight=3) + blender_frame = ctk.CTkFrame(data_frame, fg_color="#596062") + blender_frame.grid(column=0, row=0, rowspan=3, sticky=ctk.NSEW, padx=20) + gain_frame = [] gain_str = [] gain_label = [] @@ -174,9 +250,36 @@ class App(ctk.CTk): gain_button = [] gain_checkbox = [] for i in range(5): + if i == 0: + label_frame = ctk.CTkFrame(blender_frame, fg_color="#596062") + label_frame.pack(side='top', fill=ctk.BOTH) + gain_checkbox.append( + ctk.CTkCheckBox( + label_frame, + text="颜色矫正", + font=self.font, + ) + ) + gain_checkbox[i].select() + gain_checkbox[i].pack(side="left", ipady=10, padx=70) + gain_checkbox.append( + ctk.CTkCheckBox( + label_frame, + text="自动白平衡", + font=self.font, + command=functools.partial(switchCorrection, 5) + ) + ) + gain_checkbox[i + 1].select() + gain_checkbox[i + 1].pack(side="right", ipady=10, padx=70) + # gain_frame - gain_frame.append(ctk.CTkFrame(data_frame, fg_color=fg_clolor[i])) - gain_frame[i].grid(column=0, sticky=ctk.EW, pady=10, padx=20, ipady=10) + if i < 3: + gain_frame.append(ctk.CTkFrame(blender_frame, fg_color=fg_clolor[i])) + gain_frame[i].pack(side="top", fill=ctk.X, pady=10, padx=20, ipady=10) + else: + gain_frame.append(ctk.CTkFrame(data_frame, fg_color=fg_clolor[i])) + gain_frame[i].grid(column=0, sticky=ctk.EW, pady=10, padx=20, ipady=10) # label if i < 3: @@ -191,8 +294,8 @@ class App(ctk.CTk): font=self.font, ) ) - gain_checkbox[i - 3].select() - gain_checkbox[i - 3].pack(side="top", ipady=10) + gain_checkbox[i - 1].select() + gain_checkbox[i - 1].pack(side="top", ipady=10) # slider gain_slider.append( @@ -209,7 +312,10 @@ class App(ctk.CTk): command=functools.partial(setGain, i=i, stringVar=gain_str[i]) ) if i >= 3: - gain_checkbox[i - 3].configure( + gain_checkbox[0].configure( + command=functools.partial(switchCorrection, 0, gain_slider[0], gain_slider[1], gain_slider[2]) + ) + gain_checkbox[i - 1].configure( command=functools.partial(switchCorrection, i, gain_slider[i]) ) @@ -248,6 +354,8 @@ class App(ctk.CTk): ) button_frame.columnconfigure(0, weight=1) button_frame.columnconfigure(1, weight=1) + button_frame.columnconfigure(2, weight=1) + button_frame.columnconfigure(3, weight=1) switch_day = ctk.CTkButton( button_frame, text="切换为白天", @@ -262,6 +370,25 @@ class App(ctk.CTk): command=functools.partial(self.setvideo, 1), ) switch_night.grid(column=1, row=0, sticky=ctk.NSEW, padx=10, ipady=20) + switch_start = ctk.CTkButton( + button_frame, + text="开始", + font=self.font, + command=functools.partial(self.setvideo, 2), + ) + switch_start.grid(column=2, row=0, sticky=ctk.NSEW, padx=10, ipady=20) + switch_pause = ctk.CTkButton( + button_frame, + text="停止", + font=self.font, + command=functools.partial(self.setvideo, 3), + ) + switch_pause.grid(column=3, row=0, sticky=ctk.NSEW, padx=10, ipady=20) + switch_terminal = ctk.CTkButton( + button_frame, + text="调试", + font=self.font, + ) return None @@ -351,27 +478,43 @@ class App(ctk.CTk): bytes = list(map(lambda x: ord(x), list(switchSign(i)))) bytes.append(int(self.gain_values[i])) bytes.append(int(self.gain_values[i] % 1 * 256)) - bytes.append(ord('e')) - bytes.append(ord('d')) - print(f"Send:{bytes} \t Hex:0x" + f"{hex(int( self.gain_values[i] * 256 )).replace('0x', '')}".zfill(4)) + bytes.append(ord("e")) + bytes.append(ord("d")) + print( + f"Send:{bytes} \t Hex:0x" + + f"{hex(int( self.gain_values[i] * 256 )).replace('0x', '')}".zfill( + 4 + ) + ) self.serial.write(bytes) else: print("Please Connect to Serial") messagebox.showError("Please Connect Serial Port") def setvideo(self, video: int) -> None: + def switchSign (i:int) -> str: + match i: + case 0: # switch day + return "cmdday" + case 1: # night + return "cmdnig" + case 2: # start video + return "cmdsta" + case 3: # stop video + return "cmdstp" + case _: + return "error" + try: is_open = self.serial.is_open except AttributeError: messagebox.showError("Please Connect to Serial") else: if is_open: - if video == 0: - self.serial.write("cmdd".encode()) - elif video == 1: - self.serial.write("cmdn".encode()) + if video >= 0 and video < 4: + self.serial.write(( switchSign(video) + 'ed' ).encode()) else: - messagebox.showError("Set Video Error!") + messagebox.showError('Set Video Wrong') else: messagebox.showError("Please Open Serial") return None