
状态机按钮组拆分 → 转换 → 标准的使能控制问题按钮不能乱点插件试用页有三步——拆分、转换、标准。但如果转换还没拆分就点它拿什么转换所以有严格的依赖上一步做完下一步才允许点。用状态机思路控制每个按钮的可点性由前序步骤决定。只有一块当前状态的标志classPluginTrialPage:def__init__(self):self._split_pdfsNoneself._convertNone# 初始只有【拆分】可点def_on_split_done(self,sub_pdfs):self._split_pdfssub_pdfs self.convert_btn.setEnabled(True)# 只有拆分完成后启用转换self.split_btn.setEnabled(True)# 拆分结束恢复拆分可点def_on_convert_done(self,convert):self._convertconvert self.standard_btn.setEnabled(True)# 转换完成后启用标准self.convert_btn.setEnabled(True)依赖链_split_pdfs拆分产物存在 → 转换可点_convert转换产物存在 → 标准可点。运行时的伪装禁用在某个按钮干活的时候还要防止重复点击所以有_set_busy把相关按钮临时禁掉def_set_busy(self,busy:bool):self.split_btn.setEnabled(notbusy)# convert/standard 在忙时也不可点跑的时候锁死跑完恢复推进下一步。第一性原理状态即允许集按钮能不能点是当前状态的函数_convert 非空 ⟹ 标准可点 _split 非空 ⟹ 转换可点不用记一大套事件就看前序产物的存在与否。一句话用一个状态变量保存上一步做完了没用它的真值去 enable 下一步按钮。状态即允许集比硬编码一堆互斥逻辑清爽得多。