在循环中动态更改方法名称?

时间:2018-02-27 21:41:08

标签: python-3.x function loops methods

在尝试更改循环中的方法名称时,我实际上正在努力。我正在使用QT构建GUI,我面临着重复相同功能但名称不同的问题。

这是我的代码:

from Config import Ui_Dialog

class Ui_Dialog_Useful(Ui_Dialog):

    def setupUi(self, widget):
        super().setupUi(widget)
        self.Sensitivity_filler()

    def Sensitivity_filler(self):
        self.Sensitivity_1.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_2.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_3.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_4.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_5.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_6.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_7.insertItems(0, ['10', '100', '1000'])
        self.Sensitivity_8.insertItems(0, ['10', '100', '1000'])

正如您所看到的,函数之间的唯一变化是QComboBox对象的名称。我必须多次执行此操作。有没有办法在循环中做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

通常你不应该这样做(即动态名称,因为集合做得更好),但由于UI代码往往很棘手,你可以使用getattr来获得正确的对象。

例如,您可能会这样做:

for i in range(1, 9):
    getattr(self, 'Sensitivity_'+str(i)).insertItems(0, ['10', '100', '1000'])

如果有一种方法可以在不使用getattr的情况下执行此操作,那么您一定要使用它。我无论如何都不熟悉QT。例如,如果可能的话,您应该将敏感度项目存储为可迭代的(即self.sensitivities)并反复迭代。