我的程序动态地在列中创建(4)QLineEdit小部件,并在用户输入上更改列数。附加到ID的文件对话框按钮将位于每列的最后一行。因此,当单击一个按钮时,.setText将填写相应的列QLineEdit小部件。
将(4)QLineEdit小部件放入名为self.Widgets的列表中。我使用.setText向它们添加输入值。
我的问题是,如果我有多个按钮/多个ID,并且每个按钮的小部件的.setText格式相同,但每个按钮ID在self.Widget列表中使用不同范围的小部件,是否有缩短方法而无需复制和粘贴.setText代码并更改每个按钮ID的索引的方法?
按钮ID(0)在self.Widgets中使用小部件0-3
按钮ID(1)在self.Widgets中使用小部件4-7
按钮ID(2)在self.Widgets中使用小部件8-11
按钮ID(3)在self.Widgets中使用小部件12-15
依旧......
最多使用10个按钮,因此ID的范围从0到10.并且按钮仅为每列中的4个小部件设置文本。
代码:
@pyqtSlot(int)
def inText(self, button_or_id):
if isinstance(button_or_id, int):
if button_or_id == 0:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[0].setText(str(('{0}'.format(StagNum))))
self.Widgets[1].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[2].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[3].setText(str(PM))
如果我不缩短它会是什么样子:
@pyqtSlot(int)
def inText(self, button_or_id):
if isinstance(button_or_id, int):
if button_or_id == 0:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[0].setText(str(('{0}'.format(StagNum))))
self.Widgets[1].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[2].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[3].setText(str(PM))
if button_or_id == 1:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[4].setText(str(('{0}'.format(StagNum))))
self.Widgets[5].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[6].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[7].setText(str(PM))
if button_or_id == 2:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[8].setText(str(('{0}'.format(StagNum))))
self.Widgets[9].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[10].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[11].setText(str(PM))
if button_or_id == 3:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[12].setText(str(('{0}'.format(StagNum))))
self.Widgets[13].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[14].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[15].setText(str(PM))
if button_or_id == 4:
File= self.File()
if File:
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM = File
self.Widgets[16].setText(str(('{0}'.format(StagNum))))
self.Widgets[17].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[18].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[19].setText(str(PM))
依此类推,直到,button_or_id == 10 ...
答案 0 :(得分:1)
如果我理解你的方法,你应该用它来简化:
@pyqtSlot(int)
def inText(self, button_or_id):
if not isinstance(button_or_id, int):
return
if button_or_id < 0 or button_or_id > 10: # min/max valid id
return
base = button_or_id * 4
File= self.File()
if not File:
return
StagNum, SND, DND, PCVS, PCVD, CPVD, CPVS, PM = File
self.Widgets[base].setText(str(('{0}'.format(StagNum))))
self.Widgets[base + 1].setText(str(('{0} / {1}'.format(SND, DND))))
self.Widgets[base + 2].setText(str(('{0} / {1} / {2} / {3}'.format(PCVS, PCVD, CPVD, CPVS))))
self.Widgets[base + 3].setText(str(PM))
在为新列计算基值后,我在每个错误情况下退出方法以删除大量缩进。