各种按钮ID的重复.setText代码

时间:2017-07-24 21:04:21

标签: python-3.x pyqt5

我的程序动态地在列中创建(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 ...

1 个答案:

答案 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))

在为新列计算基值后,我在每个错误情况下退出方法以删除大量缩进。