Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 不同按钮ID的.setText代码重复';s_Python 3.x_Pyqt5 - Fatal编程技术网

Python 3.x 不同按钮ID的.setText代码重复';s

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列表中使用不同范围的小部件,那么

我的程序在一列中动态创建总共(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中的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))