From 2d12c160b9cf213a5c2f5c3b5fb81e8c8d153c1e Mon Sep 17 00:00:00 2001 From: gitea Date: Fri, 16 Aug 2024 17:22:52 +0800 Subject: [PATCH] =?UTF-8?q?v0.2.0.7(2024/08/16)=201.=20[t=5Fchange=5Fui:?= =?UTF-8?q?=20clibs.py]=EF=BC=9A=E4=BF=AE=E6=94=B9=E4=BA=86=20hmi.log=20?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E5=BF=97=E7=AD=89=E7=BA=A7=E4=B8=BA=20WARNIN?= =?UTF-8?q?G=202.=20[t=5Fchange=5Fui:=20openapi.py]=EF=BC=9A=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E7=AC=AC=E4=B8=80=E6=AD=A5=E7=9A=84=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E6=AD=A4=E6=A8=A1=E5=9D=97=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=AD=89=E7=BA=A7=E8=B0=83=E6=95=B4=E8=87=B3?= =?UTF-8?q?=20warning=203.=20[current:=20current.py]=20=20=20=20-=20README?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E6=95=B4=E6=9C=BA=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96=E6=B5=8B=E8=AF=95=E7=9A=84=E5=89=8D=E7=BD=AE=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=8D=B3=E6=BB=91=E5=9D=97=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=BB=91=E5=8A=A8=E5=88=B0=E6=9C=80=E5=8F=B3=E7=AB=AF=20=20=20?= =?UTF-8?q?=20-=20current=E4=BF=AE=E6=94=B9=E4=BA=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=9A=84=E9=80=BB=E8=BE=91=204.=20[t=5Fchang?= =?UTF-8?q?e=5Fui:=20aio.py]=20=20=20=20-=20=E4=BF=AE=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=91=BD=E5=90=8D=EF=BC=8Cwidgit=20->=20widget=20=20?= =?UTF-8?q?=20=20-=20=E6=A0=B9=E6=8D=AE=E7=AC=AC=205=20=E7=82=B9=E5=8F=98?= =?UTF-8?q?=E5=8A=A8=EF=BC=8C=E5=90=8C=E6=AD=A5=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=AE=9E=E7=8E=B0=20=20=20=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20UI=20=E7=95=8C=E9=9D=A2=E4=BB=A3=E7=A0=81=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E4=B9=8B=E7=AC=A6=E5=90=88=20layout.xlsx=20?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=20=20=20=20-=20=E5=B0=86=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E7=9A=84=E9=83=A8=E5=88=86=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=88=90=E4=B8=80=E4=B8=AA=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=9C=A8=20detect=5Fnetwork=20=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E8=B0=83=E7=94=A8=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=EF=BC=8C=E5=B9=B6=E4=B8=94=E7=A8=8B=E5=BA=8F=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E4=B9=9F=E4=B8=8D=E4=BC=9A=E5=8F=97=E5=88=B0=E9=98=BB?= =?UTF-8?q?=E5=A1=9E=205.=20[t=5Fchange=5Fui:=20layout.xlsx]=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E7=BB=84=E4=BB=B6=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aio/README.md | 18 +- aio/assets/layout.xlsx | Bin 1226005 -> 1223366 bytes aio/assets/templates/heartbeat | 2 +- aio/code/aio.py | 414 +++++++++++++++++---------------- aio/code/commons/clibs.py | 2 +- aio/code/commons/openapi.py | 2 +- 6 files changed, 233 insertions(+), 205 deletions(-) diff --git a/aio/README.md b/aio/README.md index fecd128..ac38beb 100644 --- a/aio/README.md +++ b/aio/README.md @@ -600,4 +600,20 @@ v0.2.0.5(2024/07/31) v0.2.0.6(2024/08/09) 1. [t_change_ui: all files] - 修改了 logger 的实现 - - 尤其是 clibs.py,使用日志字典,重写了日志记录的功能 \ No newline at end of file + - 尤其是 clibs.py,使用日志字典,重写了日志记录的功能 + +v0.2.0.7(2024/08/16) +1. [t_change_ui: clibs.py]:修改了 hmi.log 的日志等级为 WARNING +2. [t_change_ui: openapi.py]:根据第一步的修改,将此模块日志记录等级调整至 warning +3. [current: current.py] + - README新增了整机自动化测试的前置条件,即滑块需要滑动到最右端 + - current修改了文件校验的逻辑 +4. [t_change_ui: aio.py] + - 修改变量命名,widgit -> widget + - 根据第 5 点变动,同步修改代码实现 + - 调整 UI 界面代码顺序,使之符合 layout.xlsx 描述 + - 将版本检查的部分单独封装成一个函数,在 detect_network 线程初始化时调用一次,并且程序启动也不会受到阻塞 +5. [t_change_ui: layout.xlsx]:修改了组件布局方式 + + +> 前两个修改点,修复的是网络提示的颜色不正确问题,因为日志将 textbox 中的内容也作为 debug 信息写入 hmi.log 了 \ No newline at end of file diff --git a/aio/assets/layout.xlsx b/aio/assets/layout.xlsx index 735de053d795474cc6eaafa886d9667f8769904d..0437a3d4f6f61075924b477785269ad0a331fa88 100644 GIT binary patch delta 9119 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 N9QG(sDg?uF{|{4pr~?21 delta 11671 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 Q$MDZS2Aro$LGZi(2X9@Lo&W#< diff --git a/aio/assets/templates/heartbeat b/aio/assets/templates/heartbeat index 56a6051..c227083 100644 --- a/aio/assets/templates/heartbeat +++ b/aio/assets/templates/heartbeat @@ -1 +1 @@ -1 \ No newline at end of file +0 \ No newline at end of file diff --git a/aio/code/aio.py b/aio/code/aio.py index d7d8236..fdcb395 100644 --- a/aio/code/aio.py +++ b/aio/code/aio.py @@ -37,21 +37,21 @@ btns_func = { 'log': {'btn': '', 'row': 3, 'text': '保存日志'}, 'end': {'btn': '', 'row': 4, 'text': '结束运行'}, } -widgits_dp = { - 'path': {'label': '', 'entry': '', 'row': 1, 'col': 2, 'text': '数据文件夹路径'}, - 'dur': {'label': '', 'entry': '', 'row': 2, 'col': 2, 'text': '周期时间'}, - 'vel': {'label': '', 'optionmenu': '', 'row': 2, 'col': 4, 'text': ''}, - 'trq': {'label': '', 'optionmenu': '', 'row': 2, 'col': 6, 'text': ''}, - 'trqh': {'label': '', 'optionmenu': '', 'row': 2, 'col': 8, 'text': ''}, - 'estop': {'label': '', 'optionmenu': '', 'row': 2, 'col': 10, 'text': ''}, +widgets_dp = { + 'path': {'label': '', 'entry': '', 'row': 0, 'col': 1, 'text': '数据文件夹路径'}, + 'dur': {'label': '', 'entry': '', 'row': 1, 'col': 1, 'text': '周期时间'}, + 'vel': {'label': '', 'optionmenu': '', 'row': 1, 'col': 1, 'text': ''}, + 'trq': {'label': '', 'optionmenu': '', 'row': 1, 'col': 3, 'text': ''}, + 'trqh': {'label': '', 'optionmenu': '', 'row': 1, 'col': 5, 'text': ''}, + 'estop': {'label': '', 'optionmenu': '', 'row': 1, 'col': 7, 'text': ''}, } -widgits_at = { - 'path': {'label': '', 'entry': '', 'row': 2, 'col': 2, 'text': '数据文件夹路径'}, - 'loadsel': {'label': '', 'optionmenu': '', 'row': 2, 'col': 1, 'text': '负载信息'}, +widgets_at = { + 'path': {'label': '', 'entry': '', 'row': 1, 'col': 1, 'text': '数据文件夹路径'}, + 'loadsel': {'label': '', 'optionmenu': '', 'row': 1, 'col': 0, 'text': '负载信息'}, } -widgits_da = { - 'path': {'label': '', 'entry': '', 'row': 1, 'col': 2, 'text': '数据文件夹路径'}, - 'curvesel': {'label': '', 'optionmenu': '', 'row': 1, 'col': 1, 'text': '指标选择'}, +widgets_da = { + 'path': {'label': '', 'entry': '', 'row': 0, 'col': 1, 'text': '数据文件夹路径'}, + 'curvesel': {'label': '', 'optionmenu': '', 'row': 0, 'col': 0, 'text': '指标选择'}, } @@ -74,17 +74,20 @@ class App(customtkinter.CTk): self.geometry("1200x550+30+30") self.protocol("WM_DELETE_WINDOW", self.func_end_callback) self.config(bg='#E9E9E9') - self.grid_rowconfigure(6, weight=1) - self.grid_columnconfigure((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13), weight=1) + self.rowconfigure(0, weight=1) + self.rowconfigure(1, weight=19) + self.columnconfigure(0, weight=1) + self.columnconfigure(1, weight=19) self.minsize(1200, 550) # ===================================================================== - # create frame sidebar(left) - self.frame_func = customtkinter.CTkFrame(self, width=120, corner_radius=0, fg_color='#E9E9E9') - self.frame_func.grid(row=0, column=0, rowspan=7, sticky='nsew') - # create AIO logo + # 1. create frame sidebar(left) + # ===================================================================== + self.frame_func = customtkinter.CTkFrame(self, width=200, corner_radius=0, fg_color='#E9E9E9') + self.frame_func.grid(row=0, column=0, rowspan=2, sticky='nsew') + # 1.1 create AIO logo self.label_logo = customtkinter.CTkLabel(self.frame_func, text="Rokae AIO", height=60, font=customtkinter.CTkFont(family="Segoe Script Bold", size=24, weight="bold"), text_color="#4F4F4F") self.label_logo.grid(row=0, column=0, padx=15, pady=15) - # create buttons + # 1.2 create buttons for func in btns_func: btns_func[func]['btn'] = customtkinter.CTkButton(self.frame_func, corner_radius=10, text=btns_func[func]['text'], fg_color='#4F4F4F', font=self.my_font) btns_func[func]['btn'].grid(row=btns_func[func]['row'], column=0, sticky='new', padx=10, pady=10, ipadx=5, ipady=5) @@ -92,95 +95,104 @@ class App(customtkinter.CTk): btns_func['check']['btn'].configure(command=lambda: self.thread_it(self.func_check_callback)) btns_func['log']['btn'].configure(command=lambda: self.thread_it(self.func_log_callback)) btns_func['end']['btn'].configure(command=lambda: self.thread_it(self.func_end_callback)) - # create version info + # 1.3 create version info self.label_version = customtkinter.CTkLabel(self.frame_func, justify='left', text="Vers: 0.2.0.5\nDate: 08/02/2024", font=self.my_font, text_color="#4F4F4F") self.frame_func.rowconfigure(6, weight=1) self.label_version.grid(row=6, column=0, padx=20, pady=20, sticky='s') # ===================================================================== - # create tabviews - self.tabview = customtkinter.CTkTabview(self, width=10000, height=100, anchor='w', fg_color='#E9E9E9', border_width=2, border_color='#CDCDCD', command=self.tabview_click) + # 2. create tabviews + # ===================================================================== + self.tabview = customtkinter.CTkTabview(self, anchor='w', fg_color='#E9E9E9', width=1000, height=45, border_width=2, border_color='#CDCDCD', command=self.tabview_click) self.tabview.grid(row=0, column=1, padx=10, pady=5, sticky="nsew") self.tabview.add("Data Process") self.tabview.add("Automatic Test") self.tabview.add("Durable Action") - # create main menu for data process + # 2.1 create widgets of tab "Data Process" + # 2.1.1 create main menu self.menu_main_dp = customtkinter.CTkOptionMenu(self.tabview.tab('Data Process'), values=["init", "brake", "current", "iso", "wavelogger"], font=self.my_font, text_color='yellow', button_color='red', fg_color='green', command=self.func_main_callback) - self.menu_main_dp.grid(row=1, column=1, sticky='we', padx=5, pady=10) + self.menu_main_dp.grid(row=0, column=0, sticky='we', padx=5, pady=10) self.menu_main_dp.set("Start Here!") - # create sub menu for data process + # 2.2.2 create sub menu self.menu_sub_dp = customtkinter.CTkOptionMenu(self.tabview.tab('Data Process')) - # create main menu for automatic test + # 2.2.3 create labels, entries and option menus + for widget in widgets_dp: + if widget == 'path': + self.tabview.tab('Data Process').columnconfigure(12, weight=1) + widgets_dp[widget]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f'{widget.upper()}', font=self.my_font) + widgets_dp[widget]['label'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col'], sticky='e', pady=10) + widgets_dp[widget]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Data Process'), placeholder_text=widgets_dp[widget]['text'], font=self.my_font) + widgets_dp[widget]['entry'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col']+1, columnspan=11, padx=(5, 10), pady=5, sticky='we') + widgets_dp[widget]['entry'].configure(state='disabled') + elif widget in ['dur']: + widgets_dp[widget]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f"{widget.upper()}", font=self.my_font) + widgets_dp[widget]['label'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col'], sticky='e', pady=5) + widgets_dp[widget]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Data Process'), width=self.w_param, placeholder_text=f"{widgets_dp[widget]['text']}", font=self.my_font) + widgets_dp[widget]['entry'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col']+1, padx=(5, 10), pady=5, sticky='w') + widgets_dp[widget]['entry'].configure(state='disabled') + elif widget in ['vel', 'trq', 'trqh', 'estop']: + widgets_dp[widget]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f"{widget.upper()}", font=self.my_font) + widgets_dp[widget]['label'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col'], sticky='e', pady=5) + widgets_dp[widget]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Data Process'), button_color='#708090', fg_color='#778899', values=["1", "2", "3", "4", "5", "6", "7"], width=self.w_param, font=self.my_font) + widgets_dp[widget]['optionmenu'].grid(row=widgets_dp[widget]['row'], column=widgets_dp[widget]['col']+1, padx=(5, 10), pady=5, sticky='w') + widgets_dp[widget]['optionmenu'].configure(state='disabled') + # ===================================================================== + # 2.2 create widgets of tab "Automatic Test" + # 2.2.1 create main menu self.menu_main_at = customtkinter.CTkOptionMenu(self.tabview.tab('Automatic Test'), values=["init", "brake", "current"], font=self.my_font, text_color='yellow', button_color='red', fg_color='green', command=self.func_main_callback) - self.menu_main_at.grid(row=1, column=1, sticky='we', padx=5, pady=5) + self.menu_main_at.grid(row=0, column=0, sticky='we', padx=5, pady=5) self.menu_main_at.set("Start Here!") - # For data process tab START ===================================================================== - # create widgits_dp - for widgit in widgits_dp: - if widgit == 'path': - widgits_dp[widgit]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f'{widgit.upper()}', font=self.my_font) - widgits_dp[widgit]['label'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col'], sticky='e', pady=10) - widgits_dp[widgit]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Data Process'), width=670, placeholder_text=widgits_dp[widgit]['text'], font=self.my_font) - widgits_dp[widgit]['entry'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col']+1, columnspan=11, padx=(5, 10), pady=5, sticky='we') - widgits_dp[widgit]['entry'].configure(state='disabled') - elif widgit in ['dur']: - widgits_dp[widgit]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f"{widgit.upper()}", font=self.my_font) - widgits_dp[widgit]['label'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col'], sticky='e', pady=5) - widgits_dp[widgit]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Data Process'), width=self.w_param, placeholder_text=f"{widgits_dp[widgit]['text']}", font=self.my_font) - widgits_dp[widgit]['entry'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col']+1, padx=(5, 10), pady=5, sticky='w') - widgits_dp[widgit]['entry'].configure(state='disabled') - elif widgit in ['vel', 'trq', 'trqh', 'estop']: - widgits_dp[widgit]['label'] = customtkinter.CTkLabel(self.tabview.tab('Data Process'), text=f"{widgit.upper()}", font=self.my_font) - widgits_dp[widgit]['label'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col'], sticky='e', pady=5) - widgits_dp[widgit]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Data Process'), button_color='#708090', fg_color='#778899', values=["1", "2", "3", "4", "5", "6", "7"], width=self.w_param, font=self.my_font) - widgits_dp[widgit]['optionmenu'].grid(row=widgits_dp[widgit]['row'], column=widgits_dp[widgit]['col']+1, padx=(5, 10), pady=5, sticky='w') - widgits_dp[widgit]['optionmenu'].configure(state='disabled') - # For data process tab END ===================================================================== - # For automatic test tab START ===================================================================== - # create buttons + # 2.2.2 create segment buttons self.seg_button = customtkinter.CTkSegmentedButton(self.tabview.tab('Automatic Test'), dynamic_resizing=False, font=customtkinter.CTkFont(size=16, weight='bold'), command=lambda value='机器状态': self.thread_it(self.segmented_button_callback)) - self.seg_button.grid(row=1, column=2, columnspan=12, padx=(65, 10), pady=(10, 10), sticky="ew") + self.seg_button.grid(row=0, column=1, columnspan=12, padx=(65, 10), pady=(10, 10), sticky="ew") self.seg_button.configure(dynamic_resizing=False, values=["功能切换", "触发急停", "恢复急停", "待定功能", "功能待定", "机器状态", "告警信息"]) self.seg_button.set("功能切换") - # create progress bar + # 2.2.3 create progress bar self.progressbar = customtkinter.CTkProgressBar(self.tabview.tab('Automatic Test')) - self.progressbar.grid(row=5, column=1, padx=5, pady=5, sticky="ew") - self.progressbar.configure(mode="determinnate", width=10) + self.progressbar.grid(row=2, column=0, padx=5, pady=5, sticky="ew") + self.progressbar.configure(mode="determinnate", width=self.w_param) self.progressbar.start() - # create widgits_at - for widgit in widgits_at: - if widgit == 'path': - widgits_at[widgit]['label'] = customtkinter.CTkLabel(self.tabview.tab('Automatic Test'), text=f'{widgit.upper()}', font=self.my_font) - widgits_at[widgit]['label'].grid(row=widgits_at[widgit]['row'], column=widgits_at[widgit]['col'], sticky='e', padx=(20, 5), pady=5) - widgits_at[widgit]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Automatic Test'), width=670, placeholder_text=widgits_at[widgit]['text'], font=self.my_font) - widgits_at[widgit]['entry'].grid(row=widgits_at[widgit]['row'], column=widgits_at[widgit]['col']+1, columnspan=11, padx=(5, 10), pady=5, sticky='we') - widgits_at[widgit]['entry'].configure(state='disabled') - elif widgit in ['loadsel', ]: - widgits_at[widgit]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Automatic Test'), button_color='#708090', fg_color='#778899', values=["tool33", "tool66", "tool100", "inertia"], width=self.w_param, font=self.my_font) - widgits_at[widgit]['optionmenu'].grid(row=widgits_at[widgit]['row'], column=widgits_at[widgit]['col'], padx=5, pady=5, sticky='we') - widgits_at[widgit]['optionmenu'].set(widgits_at[widgit]['text']) - widgits_at[widgit]['optionmenu'].configure(state='disabled') - # For automatic test tab END ===================================================================== - # For durable_action tab START ===================================================================== - # create progress bar + # 2.2.4 create labels, entries and option menus + for widget in widgets_at: + if widget == 'path': + self.tabview.tab('Automatic Test').columnconfigure(12, weight=1) + widgets_at[widget]['label'] = customtkinter.CTkLabel(self.tabview.tab('Automatic Test'), text=f'{widget.upper()}', font=self.my_font) + widgets_at[widget]['label'].grid(row=widgets_at[widget]['row'], column=widgets_at[widget]['col'], sticky='e', padx=(20, 5), pady=5) + widgets_at[widget]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Automatic Test'), placeholder_text=widgets_at[widget]['text'], font=self.my_font) + widgets_at[widget]['entry'].grid(row=widgets_at[widget]['row'], column=widgets_at[widget]['col']+1, columnspan=11, padx=(5, 10), pady=5, sticky='we') + widgets_at[widget]['entry'].configure(state='disabled') + elif widget in ['loadsel', ]: + widgets_at[widget]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Automatic Test'), button_color='#708090', fg_color='#778899', values=["tool33", "tool66", "tool100", "inertia"], width=self.w_param, font=self.my_font) + widgets_at[widget]['optionmenu'].grid(row=widgets_at[widget]['row'], column=widgets_at[widget]['col'], padx=5, pady=5, sticky='we') + widgets_at[widget]['optionmenu'].set(widgets_at[widget]['text']) + widgets_at[widget]['optionmenu'].configure(state='disabled') + # ===================================================================== + # 2.3 create widgets of tab "Durable Action" + # 2.3.1 create progress bar self.progressbar_da = customtkinter.CTkProgressBar(self.tabview.tab('Durable Action')) - self.progressbar_da.grid(row=2, column=1, padx=5, pady=5, sticky="ew") + self.progressbar_da.grid(row=1, column=0, padx=5, pady=5, sticky="ew") self.progressbar_da.configure(mode="determinnate", width=self.w_param) self.progressbar_da.start() - for widgit in widgits_da: - if widgit == 'path': - widgits_da[widgit]['label'] = customtkinter.CTkLabel(self.tabview.tab('Durable Action'), text=f'{widgit.upper()}', font=self.my_font) - widgits_da[widgit]['label'].grid(row=widgits_da[widgit]['row'], column=widgits_da[widgit]['col'], sticky='e', padx=(20, 5), pady=10) - widgits_da[widgit]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Durable Action'), width=670, placeholder_text=widgits_da[widgit]['text'], font=self.my_font) - widgits_da[widgit]['entry'].grid(row=widgits_da[widgit]['row'], column=widgits_da[widgit]['col']+1, columnspan=11, padx=(5, 10), pady=10, sticky='we') - elif widgit in ['curvesel']: - widgits_da[widgit]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Durable Action'), dynamic_resizing=False, button_color='#708090', fg_color='#778899', values=['device_servo_trq_feedback', '[max] device_servo_trq_feedback'], font=self.my_font) - widgits_da[widgit]['optionmenu'].grid(row=widgits_da[widgit]['row'], column=widgits_da[widgit]['col'], padx=5, pady=10, sticky='we') - widgits_da[widgit]['optionmenu'].set(widgits_da[widgit]['text']) - # For durable_action tab END ===================================================================== - # create textbox + # 2.3.2 create labels, entries and option menus + for widget in widgets_da: + if widget == 'path': + self.tabview.tab('Durable Action').columnconfigure(12, weight=1) + widgets_da[widget]['label'] = customtkinter.CTkLabel(self.tabview.tab('Durable Action'), text=f'{widget.upper()}', font=self.my_font) + widgets_da[widget]['label'].grid(row=widgets_da[widget]['row'], column=widgets_da[widget]['col'], sticky='e', padx=(20, 5), pady=10) + widgets_da[widget]['entry'] = customtkinter.CTkEntry(self.tabview.tab('Durable Action'), placeholder_text=widgets_da[widget]['text'], font=self.my_font) + widgets_da[widget]['entry'].grid(row=widgets_da[widget]['row'], column=widgets_da[widget]['col']+1, columnspan=11, padx=(5, 10), pady=10, sticky='we') + elif widget in ['curvesel']: + widgets_da[widget]['optionmenu'] = customtkinter.CTkOptionMenu(self.tabview.tab('Durable Action'), dynamic_resizing=False, button_color='#708090', fg_color='#778899', values=['device_servo_trq_feedback', '[max] device_servo_trq_feedback'], font=self.my_font) + widgets_da[widget]['optionmenu'].grid(row=widgets_da[widget]['row'], column=widgets_da[widget]['col'], padx=5, pady=10, sticky='we') + widgets_da[widget]['optionmenu'].set(widgets_da[widget]['text']) + # ===================================================================== + # 3. create textbox + # ===================================================================== self.textbox = customtkinter.CTkTextbox(self, wrap='none', font=customtkinter.CTkFont(family="consolas", size=14), text_color="blue", fg_color='#E9E9E9', border_width=2, border_color='#CDCDCD', border_spacing=5) - self.textbox.grid(row=6, column=1, columnspan=13, ipadx=10, ipady=10, padx=10, pady=(5, 10), sticky='nsew') + self.textbox.grid(row=1, column=1, columnspan=13, ipadx=10, ipady=10, padx=10, pady=(5, 10), sticky='nsew') self.textbox.configure(state='normal') + # functions below ↓ ---------------------------------------------------------------------------------------- + + def version_check(self): # ===================================================================== # version check cur_vers = self.label_version.cget("text").replace('\n', ' @ ').replace("Vers: ", '').replace("Date: ", '') @@ -192,13 +204,12 @@ class App(customtkinter.CTk): tkinter.messagebox.showwarning(title="版本更新", message=msg) except: tkinter.messagebox.showwarning(title="版本更新", message="连接服务器失败,无法确认当前是否是最新版本......") - # functions below ↓ ---------------------------------------------------------------------------------------- def create_canvas(self, _figure): self.canvas = FigureCanvasTkAgg(_figure, self.tabview.tab('Durable Action')) self.canvas.draw() self.canvas.get_tk_widget().configure(height=600) - self.canvas.get_tk_widget().grid(row=3, column=1, rowspan=3, columnspan=13, padx=20, pady=10, sticky="nsew") + self.canvas.get_tk_widget().grid(row=2, column=0, columnspan=13, padx=10, pady=10, sticky="nsew") def create_plot(self): rcParams['font.sans-serif'] = ['SimHei'] @@ -207,7 +218,7 @@ class App(customtkinter.CTk): rcParams['font.size'] = 14 rcParams['lines.marker'] = 'o' - curvesel = widgits_da['curvesel']['optionmenu'].get() + curvesel = widgets_da['curvesel']['optionmenu'].get() while True: if not self.hr.durable_lock: self.hr.durable_lock = 1 @@ -228,7 +239,7 @@ class App(customtkinter.CTk): if not df.equals(self.df_copy) or self.flg == 0 or curvesel != self.old_curve: self.flg = 1 self.df_copy = df.copy() - self.old_curve = widgits_da['curvesel']['optionmenu'].get() + self.old_curve = widgets_da['curvesel']['optionmenu'].get() close('all') _figure = figure(frameon=True, facecolor='#E9E9E9') subplots_adjust(left=0.04, right=0.98, bottom=0.1, top=0.95) @@ -276,6 +287,7 @@ class App(customtkinter.CTk): # self.tabview.configure(state='normal') def detect_network(self): + self.version_check() df = DataFrame(clibs.durable_data_current) df.to_excel(clibs.durable_data_current_xlsx, index=False) df = DataFrame(clibs.durable_data_current_max) @@ -319,130 +331,130 @@ class App(customtkinter.CTk): tab_name = self.tabview.get() self.textbox.delete(index1='1.0', index2='end') if tab_name == 'Data Process': - for widgit in widgits_dp: - if widgit in ['path', 'dur']: - widgits_dp[widgit]['label'].configure(text=f'{widgit.upper()}', text_color='black') - widgits_dp[widgit]['entry'].delete(0, tkinter.END) - widgits_dp[widgit]['entry'].configure(placeholder_text=widgits_dp[widgit]['text'], state='normal') - widgits_dp[widgit]['entry'].configure(state='disabled') - elif widgit in ['vel', 'trq', 'trqh', 'estop']: - widgits_dp[widgit]['label'].configure(text=f'{widgit.upper()}', text_color="black") - widgits_dp[widgit]['optionmenu'].configure(state='normal') - widgits_dp[widgit]['optionmenu'].set('1') - widgits_dp[widgit]['optionmenu'].configure(state='disabled') + for widget in widgets_dp: + if widget in ['path', 'dur']: + widgets_dp[widget]['label'].configure(text=f'{widget.upper()}', text_color='black') + widgets_dp[widget]['entry'].delete(0, tkinter.END) + widgets_dp[widget]['entry'].configure(placeholder_text=widgets_dp[widget]['text'], state='normal') + widgets_dp[widget]['entry'].configure(state='disabled') + elif widget in ['vel', 'trq', 'trqh', 'estop']: + widgets_dp[widget]['label'].configure(text=f'{widget.upper()}', text_color="black") + widgets_dp[widget]['optionmenu'].configure(state='normal') + widgets_dp[widget]['optionmenu'].set('1') + widgets_dp[widget]['optionmenu'].configure(state='disabled') self.menu_sub_dp.grid_forget() elif tab_name == 'Automatic Test': - for widgit in widgits_at: - if widgit in ['path', ]: - widgits_at[widgit]['label'].configure(text=f'{widgit.upper()}', text_color='black') - widgits_at[widgit]['entry'].delete(0, tkinter.END) - widgits_at[widgit]['entry'].configure(placeholder_text=widgits_at[widgit]['text'], state='normal') - widgits_at[widgit]['entry'].configure(state='disabled') - elif widgit in ['loadsel']: - widgits_at[widgit]['optionmenu'].configure(state='normal') - widgits_at[widgit]['optionmenu'].set(widgits_at[widgit]['text']) - widgits_at[widgit]['optionmenu'].configure(state='disabled') + for widget in widgets_at: + if widget in ['path', ]: + widgets_at[widget]['label'].configure(text=f'{widget.upper()}', text_color='black') + widgets_at[widget]['entry'].delete(0, tkinter.END) + widgets_at[widget]['entry'].configure(placeholder_text=widgets_at[widget]['text'], state='normal') + widgets_at[widget]['entry'].configure(state='disabled') + elif widget in ['loadsel']: + widgets_at[widget]['optionmenu'].configure(state='normal') + widgets_at[widget]['optionmenu'].set(widgets_at[widget]['text']) + widgets_at[widget]['optionmenu'].configure(state='disabled') self.seg_button.set("功能切换") elif tab_name == 'Durable Action': - for widgit in widgits_da: - if widgit in ['path', ]: - widgits_da[widgit]['label'].configure(text=f'{widgit.upper()}', text_color='black') - widgits_da[widgit]['entry'].delete(0, tkinter.END) - widgits_da[widgit]['entry'].configure(placeholder_text=widgits_at[widgit]['text'], state='normal') - elif widgit in ['curvesel']: - widgits_da[widgit]['optionmenu'].configure(state='normal') - widgits_da[widgit]['optionmenu'].set(widgits_da[widgit]['text']) + for widget in widgets_da: + if widget in ['path', ]: + widgets_da[widget]['label'].configure(text=f'{widget.upper()}', text_color='black') + widgets_da[widget]['entry'].delete(0, tkinter.END) + widgets_da[widget]['entry'].configure(placeholder_text=widgets_at[widget]['text'], state='normal') + elif widget in ['curvesel']: + widgets_da[widget]['optionmenu'].configure(state='normal') + widgets_da[widget]['optionmenu'].set(widgets_da[widget]['text']) def func_main_callback(self, func_name): self.initialization() tab_name = self.tabview.get() if tab_name == 'Data Process': if func_name == 'brake': - for widgit in widgits_dp: - if widgit in ['path']: - widgits_dp[widgit]['label'].configure(text_color='red') - widgits_dp[widgit]['entry'].configure(state='normal') - elif widgit in ['vel', 'trq', 'estop']: - widgits_dp[widgit]['label'].configure(text_color="red") - widgits_dp[widgit]['optionmenu'].configure(state='normal') + for widget in widgets_dp: + if widget in ['path']: + widgets_dp[widget]['label'].configure(text_color='red') + widgets_dp[widget]['entry'].configure(state='normal') + elif widget in ['vel', 'trq', 'estop']: + widgets_dp[widget]['label'].configure(text_color="red") + widgets_dp[widget]['optionmenu'].configure(state='normal') elif func_name == 'current': self.menu_sub_dp = customtkinter.CTkOptionMenu(self.tabview.tab('Data Process'), values=["max", "avg", "cycle"], font=self.my_font, button_color='red', fg_color='green', command=self.func_sub_callback) - self.menu_sub_dp.grid(row=2, column=1, sticky='we', padx=5, pady=5) + self.menu_sub_dp.grid(row=1, column=0, sticky='we', padx=5, pady=5) self.menu_sub_dp.set("--select--") self.menu_sub_dp.configure(text_color='yellow') elif func_name == 'iso' or func_name == 'wavelogger': - for widgit in widgits_dp: - if widgit in ['path']: - widgits_dp[widgit]['label'].configure(text_color='red') - widgits_dp[widgit]['entry'].configure(state='normal') + for widget in widgets_dp: + if widget in ['path']: + widgets_dp[widget]['label'].configure(text_color='red') + widgets_dp[widget]['entry'].configure(state='normal') else: self.initialization() self.menu_main_dp.set("Start Here!") elif tab_name == 'Automatic Test': if func_name == 'brake': - for widgit in widgits_at: - if widgit in ['path',]: - widgits_at[widgit]['label'].configure(text_color='red') - widgits_at[widgit]['entry'].delete(0, tkinter.END) - widgits_at[widgit]['entry'].configure(placeholder_text=widgits_at[widgit]['text'], state='normal') - widgits_at[widgit]['entry'].configure(state='normal') - elif widgit in ['loadsel', ]: - widgits_at[widgit]['optionmenu'].set(widgits_at[widgit]['text']) - widgits_at[widgit]['optionmenu'].configure(state='normal', text_color='red') + for widget in widgets_at: + if widget in ['path',]: + widgets_at[widget]['label'].configure(text_color='red') + widgets_at[widget]['entry'].delete(0, tkinter.END) + widgets_at[widget]['entry'].configure(placeholder_text=widgets_at[widget]['text'], state='normal') + widgets_at[widget]['entry'].configure(state='normal') + elif widget in ['loadsel', ]: + widgets_at[widget]['optionmenu'].set(widgets_at[widget]['text']) + widgets_at[widget]['optionmenu'].configure(state='normal', text_color='red') elif func_name == 'current': - for widgit in widgits_at: - if widgit in ['path',]: - widgits_at[widgit]['label'].configure(text_color='red') - widgits_at[widgit]['entry'].delete(0, tkinter.END) - widgits_at[widgit]['entry'].configure(placeholder_text=widgits_at[widgit]['text'], state='normal') - widgits_at[widgit]['entry'].configure(state='normal') - elif widgit in ['loadsel', ]: - widgits_at[widgit]['optionmenu'].set(widgits_at[widgit]['text']) - widgits_at[widgit]['optionmenu'].configure(state='normal', text_color='red') + for widget in widgets_at: + if widget in ['path',]: + widgets_at[widget]['label'].configure(text_color='red') + widgets_at[widget]['entry'].delete(0, tkinter.END) + widgets_at[widget]['entry'].configure(placeholder_text=widgets_at[widget]['text'], state='normal') + widgets_at[widget]['entry'].configure(state='normal') + elif widget in ['loadsel', ]: + widgets_at[widget]['optionmenu'].set(widgets_at[widget]['text']) + widgets_at[widget]['optionmenu'].configure(state='normal', text_color='red') else: self.initialization() self.menu_main_at.set("Start Here!") def func_sub_callback(self, func_name): if func_name == "max" or func_name == "avg": - for widgit in widgits_dp: - if widgit in ['path']: - widgits_dp[widgit]['label'].configure(text_color='red') - widgits_dp[widgit]['entry'].delete(0, tkinter.END) - widgits_dp[widgit]['entry'].configure(placeholder_text=widgits_dp[widgit]['text'], state='normal') - widgits_dp[widgit]['entry'].configure(state='normal') - elif widgit in ['dur']: - widgits_dp[widgit]['label'].configure(text_color='black') - widgits_dp[widgit]['entry'].delete(0, tkinter.END) - widgits_dp[widgit]['entry'].configure(placeholder_text=widgits_dp[widgit]['text'], state='normal') - widgits_dp[widgit]['entry'].configure(state='disabled') - elif widgit in ['vel', 'trqh', 'estop']: - widgits_dp[widgit]['label'].configure(text_color='black') - widgits_dp[widgit]['optionmenu'].set('1') - widgits_dp[widgit]['optionmenu'].configure(state='disabled') - elif widgit in ['trq']: - widgits_dp[widgit]['label'].configure(text_color='red') - widgits_dp[widgit]['optionmenu'].set('1') - widgits_dp[widgit]['optionmenu'].configure(state='normal') + for widget in widgets_dp: + if widget in ['path']: + widgets_dp[widget]['label'].configure(text_color='red') + widgets_dp[widget]['entry'].delete(0, tkinter.END) + widgets_dp[widget]['entry'].configure(placeholder_text=widgets_dp[widget]['text'], state='normal') + widgets_dp[widget]['entry'].configure(state='normal') + elif widget in ['dur']: + widgets_dp[widget]['label'].configure(text_color='black') + widgets_dp[widget]['entry'].delete(0, tkinter.END) + widgets_dp[widget]['entry'].configure(placeholder_text=widgets_dp[widget]['text'], state='normal') + widgets_dp[widget]['entry'].configure(state='disabled') + elif widget in ['vel', 'trqh', 'estop']: + widgets_dp[widget]['label'].configure(text_color='black') + widgets_dp[widget]['optionmenu'].set('1') + widgets_dp[widget]['optionmenu'].configure(state='disabled') + elif widget in ['trq']: + widgets_dp[widget]['label'].configure(text_color='red') + widgets_dp[widget]['optionmenu'].set('1') + widgets_dp[widget]['optionmenu'].configure(state='normal') elif func_name == 'cycle': - for widgit in widgits_dp: - if widgit in ['path', 'dur']: - color = 'blue' if widgit == 'dur' else 'red' - widgits_dp[widgit]['label'].configure(text_color=color) - widgits_dp[widgit]['entry'].delete(0, tkinter.END) - widgits_dp[widgit]['entry'].configure(placeholder_text=widgits_dp[widgit]['text'], state='normal') - widgits_dp[widgit]['entry'].configure(state='normal') - elif widgit in ['vel', 'trq', 'trqh']: - color = 'blue' if widgit == 'trqh' else 'red' - widgits_dp[widgit]['label'].configure(text_color=color) - widgits_dp[widgit]['optionmenu'].set('1') - widgits_dp[widgit]['optionmenu'].configure(state='normal') - elif widgit in ['estop']: - widgits_dp[widgit]['label'].configure(text_color="black") - widgits_dp[widgit]['optionmenu'].set('1') - widgits_dp[widgit]['optionmenu'].configure(state='disabled') + for widget in widgets_dp: + if widget in ['path', 'dur']: + color = 'blue' if widget == 'dur' else 'red' + widgets_dp[widget]['label'].configure(text_color=color) + widgets_dp[widget]['entry'].delete(0, tkinter.END) + widgets_dp[widget]['entry'].configure(placeholder_text=widgets_dp[widget]['text'], state='normal') + widgets_dp[widget]['entry'].configure(state='normal') + elif widget in ['vel', 'trq', 'trqh']: + color = 'blue' if widget == 'trqh' else 'red' + widgets_dp[widget]['label'].configure(text_color=color) + widgets_dp[widget]['optionmenu'].set('1') + widgets_dp[widget]['optionmenu'].configure(state='normal') + elif widget in ['estop']: + widgets_dp[widget]['label'].configure(text_color="black") + widgets_dp[widget]['optionmenu'].set('1') + widgets_dp[widget]['optionmenu'].configure(state='disabled') def write2textbox(self, text, wait=0, exitcode=0, color='blue', tab_name='Data Process'): self.textbox.tag_add(color, 'insert', 'end') @@ -497,10 +509,10 @@ class App(customtkinter.CTk): if tab_name == 'Data Process': func_name = self.menu_main_dp.get() if func_name == 'brake': - path = widgits_dp['path']['entry'].get().strip() - vel = widgits_dp['vel']['optionmenu'].get() - trq = widgits_dp['trq']['optionmenu'].get() - estop = widgits_dp['estop']['optionmenu'].get() + path = widgets_dp['path']['entry'].get().strip() + vel = widgets_dp['vel']['optionmenu'].get() + trq = widgets_dp['trq']['optionmenu'].get() + estop = widgets_dp['estop']['optionmenu'].get() c1 = exists(path) c2 = True if len({vel, trq, estop}) == 3 else False @@ -510,11 +522,11 @@ class App(customtkinter.CTk): return 0, 0 # ======================================================= elif func_name == 'current': - path = widgits_dp['path']['entry'].get().strip() - dur = widgits_dp['dur']['entry'].get().strip() - vel = widgits_dp['vel']['optionmenu'].get() - trq = widgits_dp['trq']['optionmenu'].get() - trqh = widgits_dp['trqh']['optionmenu'].get() + path = widgets_dp['path']['entry'].get().strip() + dur = widgets_dp['dur']['entry'].get().strip() + vel = widgets_dp['vel']['optionmenu'].get() + trq = widgets_dp['trq']['optionmenu'].get() + trqh = widgets_dp['trqh']['optionmenu'].get() sub = self.menu_sub_dp.get() c1 = exists(path) @@ -533,14 +545,14 @@ class App(customtkinter.CTk): return 0, 0 # ======================================================= elif func_name == 'iso': - path = widgits_dp['path']['entry'].get().strip() + path = widgets_dp['path']['entry'].get().strip() if exists(path): return 3, path else: return 0, 0 # ======================================================= elif func_name == 'wavelogger': - path = widgits_dp['path']['entry'].get().strip() + path = widgets_dp['path']['entry'].get().strip() if exists(path): return 4, path else: @@ -551,8 +563,8 @@ class App(customtkinter.CTk): elif tab_name == 'Automatic Test': func_name = self.menu_main_at.get() if func_name == 'brake': - path = widgits_at['path']['entry'].get().strip() - loadsel = widgits_at['loadsel']['optionmenu'].get() + path = widgets_at['path']['entry'].get().strip() + loadsel = widgets_at['loadsel']['optionmenu'].get() c1 = exists(path) c2 = loadsel in ['tool100', 'tool66', 'tool33'] if c1 and c2: @@ -560,8 +572,8 @@ class App(customtkinter.CTk): else: return 0, 0 elif func_name == 'current': - path = widgits_at['path']['entry'].get().strip() - loadsel = widgits_at['loadsel']['optionmenu'].get() + path = widgets_at['path']['entry'].get().strip() + loadsel = widgets_at['loadsel']['optionmenu'].get() c1 = exists(path) c2 = loadsel in ['tool100', 'inertia'] if c1 and c2: @@ -571,8 +583,8 @@ class App(customtkinter.CTk): else: return 0, 0 elif tab_name == 'Durable Action': - path = widgits_da['path']['entry'].get().strip() - curvesel = widgits_da['curvesel']['optionmenu'].get() + path = widgets_da['path']['entry'].get().strip() + curvesel = widgets_da['curvesel']['optionmenu'].get() c1 = exists(path) c2 = curvesel in ['device_servo_trq_feedback', '[max] device_servo_trq_feedback'] if c1 and c2: diff --git a/aio/code/commons/clibs.py b/aio/code/commons/clibs.py index 32f4d1a..d5919b6 100644 --- a/aio/code/commons/clibs.py +++ b/aio/code/commons/clibs.py @@ -78,7 +78,7 @@ log_dicts = { 'formatter': 'test', }, 'hmi.log': { - 'level': 'DEBUG', + 'level': 'WARNING', 'class': 'concurrent_log_handler.ConcurrentRotatingFileHandler', 'filename': log_data_hmi, 'maxBytes': 1024*1024*50, diff --git a/aio/code/commons/openapi.py b/aio/code/commons/openapi.py index 7e458e0..652926a 100644 --- a/aio/code/commons/openapi.py +++ b/aio/code/commons/openapi.py @@ -261,7 +261,7 @@ class HmiRequest(object): def msg_storage(self, response, flag=0): # response是解码后的字符串 messages = self.c_msg if flag == 0 else self.c_msg_xs - logger.debug(f"{loads(response)}") + logger.warning(f"{loads(response)}") if 'move.monitor' in response: pass elif len(messages) < 10000: