原创|PYQT5|编程经验|爬坑|分享|4|python进阶操作:多个控件使用同一个函数入口
2021/11/22 20:10:44
本文主要是介绍原创|PYQT5|编程经验|爬坑|分享|4|python进阶操作:多个控件使用同一个函数入口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在我们进行PYQT5进行编程的时候,当界面设计完毕,通常需要将控件与代码中的相应的函数事件一一对应。如果控件比较少,可能还没什么,但是,随着后续软件项目的需求和功能逐步增多,是非常不利于后续维护的,而且这种方式,不利于后续的扩展。
如果要比较好的解决这种问题,在开始设计时,就需要有一个比较好的架构设计。比较好的一个办法是,针对多个同质或者同类型的控件,调用一个统一的入口,后续进行维护时,只用维护较少的程序入口就行,实现数据分离。
以下是本人日常编程中的一个实例,特此记录下来,便于以后参考学习。
测试场景:
多个按钮控件进行不同版本的DFU升级操作。
分析步骤:
1.目前只有不到10个版本需要进行更新操作,后续可以根据使用者的需求,进行扩充;
2.可以在配置文件中,配置版本号,程序初始化时,读取配置文件,并显示为按钮控件名;
3.默认情况下,这些按钮控件都是不可见的;如果版本号不为空,且版本号有效,则对应的按钮控件会显示在程序界面上;
4.多个按钮调用同一个入口函数,并根据使用者的点击操作,获取当前被点击的按钮名字,再执行相应的函数,并进行DFU升级操作,从而实现多个按钮调用同一个入口函数,但是可以自动实现不同的功能;
函数调用实例
#按钮连接函数 self.toolButton_BatchRun_DFU_1.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_2.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_3.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_4.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_5.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_6.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_7.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_8.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_9.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_10.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_11.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_12.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_13.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_14.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_15.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_16.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_17.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_18.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_19.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_20.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_21.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_22.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_23.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_24.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_25.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_26.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_27.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_28.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_29.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接- self.toolButton_BatchRun_DFU_30.clicked.connect(self.BatchRun_g2_DFU) # 按钮链接-
具体实现函数
def BatchRun_g2_DFU(self): global UserMode global Bridge_BT_ID if UserMode != 1: self.logOut("软件未注册或者已过期,请注册后,再重新打开此软件...") return button = w.sender() button_name=button.objectName() print('button={}'.format(button)) print('button_name={}'.format(button_name)) button_title = button.text() self.logOut('button_title={}'.format(button_title)) ota_name='' try: ota_name='ota'+str(int(str(button_title).split('(')[1].replace(')','').replace('.',''))) self.logOut('ota_name={}'.format(ota_name)) #判断版本号 if 'ota' not in ota_name: return 0 except BaseException as get_err: self.logOut('button_title={},获取版本号错误...'.format(button_title)) return -1 if not button.isCheckable(): if self.dialog_YesNo('正在操作:{},是否进行DFU更新?\n更新对象:\n{}\nDFU包名:{}'.format(Bridge_BT_ID,button_title,ota_name)) == 1: threading.Thread(target=self.BatchRun_g2_DFU_thread,args=(ota_name,button_title,Bridge_BT_ID,)).start() def BatchRun_g2_DFU_thread(self,ota_name='',button_title='',Bridge_BT_ID=''): global folderName global RunFlag try: self.save_user_config() # 获取需要添加的LockID列表 LockID_List = self.get_Batch_LockList() self.logOut('-' * 100) WaitTimes_DFU = int(self.spinBox_WaitTimes_DFU.value()) SleepTime_DFU = int(self.spinBox_SleepTime_DFU.value()) RunFlag = 1 # for runCount in range(1, RunTimes + 1): if RunFlag == 0: return -1 self.logOut('-' * 100) self.logOut('button_title= {}'.format(button_title)) self.logOut('开始执行 BatchRun_g2_DFU_thread 操作,Bridge_BT_ID= {},ota_name= {}'.format(Bridge_BT_ID,ota_name)) startTime = IDP_EFG_requests_HRD.getTime(1) # Pin_Input = self.textEdit_DeletePassword_Show.toPlainText() result = IDP_EFG_requests_HRD.bridge_g2_DFU(str(ota_name),Bridge_BT_ID) self.logOut('Request返回结果=\n{}'.format(IDP_EFG_requests_HRD.show)) self.logOut('命令返回结果= {}'.format(result)) endTime = IDP_EFG_requests_HRD.getTime(1) spent_times = IDP_EFG_requests_HRD.date_time_count_ms(endTime, startTime) self.logOut('开始执行时间= {} ,结束执行时间= {} ,总共花费时间= {} 秒'.format(startTime, endTime, spent_times)) self.logOut('-' * 100) folderName = "\\API_test_Logs" SaveLogFileName = "\\Bridge_BatchRun_g2_DFU_thread_log.log" self.writeFile(self.getDT() + " [info] " + "--------" + "\n", folderName, SaveLogFileName) self.writeFile(self.getDT() + " [info] " + "button_title= {} ".format(button_title) + "\n", folderName, SaveLogFileName) self.writeFile(self.getDT() + " [info] " + '开始执行,Bridge_BT_ID= {} 的DFU 操作,ota_name= {}'.format(Bridge_BT_ID,ota_name) + "\n", folderName,SaveLogFileName) self.writeFile(self.getDT() + " [info] " + "返回结果= {}".format(str(result)) + "\n", folderName,SaveLogFileName) self.writeFile(self.getDT() + " [info] " + '开始执行时间= {} ,'.format(startTime) + '结束执行时间= {} ,'.format(endTime) + '总共花费时间= {} 秒'.format(spent_times) + "\n", folderName, SaveLogFileName) self.logOut('-' * 100) self.logOut_dfu(string_color('-' * 100, '0000FF')) self.logOut('Bridge_BT_ID={},开始DFU操作,DFU过程中,WIFI灯会不断闪烁绿灯,请等待程序自动完成,完成后Bridge会自动重启...'.format(Bridge_BT_ID)) self.logOut_dfu('Bridge_BT_ID={},开始DFU操作,DFU过程中,WIFI灯会不断闪烁绿灯,请等待程序自动完成,完成后Bridge会自动重启...'.format(Bridge_BT_ID)) self.logOut('Bridge_BT_ID={},请等待重启后WIFI灯显示常亮绿色状态后继续...'.format(Bridge_BT_ID)) self.logOut_dfu('Bridge_BT_ID={},请等待重启后WIFI灯显示常亮绿色状态后继续...'.format(Bridge_BT_ID)) for r in range(1, WaitTimes_DFU+1): if RunFlag == 0: return 0 self.logOut(string_color('Bridge_BT_ID={},等待30秒,第 {}/{} 次...'.format(Bridge_BT_ID,r,WaitTimes_DFU),'0000FF')) self.logOut_dfu(string_color('Bridge_BT_ID={},等待30秒,第 {}/{} 次...'.format(Bridge_BT_ID,r,WaitTimes_DFU),'0000FF')) self.logOut(string_color('Bridge_BT_ID={},当前共计已等待 {} 秒...'.format(Bridge_BT_ID,(r-1)*30),'FF00FF')) self.logOut_dfu(string_color('Bridge_BT_ID={},当前共计已等待 {} 秒...'.format(Bridge_BT_ID,(r-1)*30),'FF00FF')) sleep(int(SleepTime_DFU)) DFU_endTime = IDP_EFG_requests_HRD.getTime(1) DFU_spent_times = IDP_EFG_requests_HRD.date_time_count_ms(DFU_endTime, startTime) self.logOut('-' * 100) self.logOut('开始执行时间= {} ,结束执行时间= {} ,总共花费时间= {} 秒'.format(startTime, DFU_endTime, DFU_spent_times)) self.logOut_dfu('开始执行时间= {} ,结束执行时间= {} ,总共花费时间= {} 秒'.format(startTime, DFU_endTime, DFU_spent_times)) self.logOut(string_color('DFU已完成,Bridge_BT_ID={}...'.format(Bridge_BT_ID),'00FFFF')) self.logOut_dfu(string_color('DFU已完成,Bridge_BT_ID={}...'.format(Bridge_BT_ID),'00FFFF')) self.logOut(string_color('Bridge_BT_ID={},请等待设备重启完成...'.format(Bridge_BT_ID),'00FFFF')) self.logOut_dfu(string_color('Bridge_BT_ID={},请等待设备重启完成...'.format(Bridge_BT_ID),'00FFFF')) self.logOut(string_color('-'*100,'0000FF')) self.logOut_dfu(string_color('-'*100,'0000FF')) self.logOut('-' * 100) except Exception as e: self.logOut('BatchRun_g2_DFU_thread 失败,失败信息= {}'.format(e))
函数说明
主要的实现函数为:
button = w.sender() button_name=button.objectName() print('button={}'.format(button)) print('button_name={}'.format(button_name)) button_title = button.text() self.logOut('button_title={}'.format(button_title)) ota_name='' try: ota_name='ota'+str(int(str(button_title).split('(')[1].replace(')','').replace('.',''))) self.logOut('ota_name={}'.format(ota_name)) #判断版本号 if 'ota' not in ota_name: return 0 except BaseException as get_err: self.logOut('button_title={},获取版本号错误...'.format(button_title)) return -1 if not button.isCheckable(): if self.dialog_YesNo('正在操作:{},是否进行DFU更新?\n更新对象:\n{}\nDFU包名:{}'.format(Bridge_BT_ID,button_title,ota_name)) == 1: threading.Thread(target=self.BatchRun_g2_DFU_thread,args=(ota_name,button_title,Bridge_BT_ID,)).start()
这篇关于原创|PYQT5|编程经验|爬坑|分享|4|python进阶操作:多个控件使用同一个函数入口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型