Python 3.x 不同按钮ID的.setText代码重复';s
我的程序在一列中动态创建总共(4)个QLineEdit小部件,以及用户输入的列更改数。附加到ID的文件对话框按钮将位于每列的最后一行。因此,当单击一个按钮时,setText将填写QLineEdit小部件对应的列 (4)个QLineEdit小部件被放入名为self.widgets的列表中。我正在使用.setText向它们添加输入值 我的问题是,如果我有多个按钮/多个ID,并且小部件的.setText格式对于每个按钮都是相同的,但是每个按钮ID在self.Widget列表中使用不同范围的小部件,那么有没有一种方法可以缩短该方法,而不必复制和粘贴.setText代码并更改每个按钮ID的索引Python 3.x 不同按钮ID的.setText代码重复';s,python-3.x,pyqt5,Python 3.x,Pyqt5,我的程序在一列中动态创建总共(4)个QLineEdit小部件,以及用户输入的列更改数。附加到ID的文件对话框按钮将位于每列的最后一行。因此,当单击一个按钮时,setText将填写QLineEdit小部件对应的列 (4)个QLineEdit小部件被放入名为self.widgets的列表中。我正在使用.setText向它们添加输入值 我的问题是,如果我有多个按钮/多个ID,并且小部件的.setText格式对于每个按钮都是相同的,但是每个按钮ID在self.Widget列表中使用不同范围的小部件,那么
按钮ID(0)在self.widgets中使用小部件0-3 按钮ID(1)使用self.widgets中的widgets 4-7 按钮ID(2)使用self.widgets中的widgets 8-11 按钮ID(3)使用self.widgets中的widgets 12-15 等等
最多使用10个按钮,因此#of 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))
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))
以此类推,直到按钮\u或\u id==10…如果我完全理解您的方法,您应该使用它来简化:
@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))
@pyqtlot(int)
def inText(自身、按钮或id):
如果不存在(按钮或id,int):
返回
如果按钮或按钮id<0或按钮或按钮id>10:#最小/最大有效id
返回
基本=按钮或按钮id*4
File=self.File()
如果不是文件:
返回
StagNum,SND,DND,PCVS,PCVD,CPVD,CPVS,PM=文件
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))
在计算新列的基值后,我退出方法并返回每个错误情况,以删除大量缩进
@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))