Код повторения PyQt5 для номера виджета одного типа - PullRequest
1 голос
/ 21 апреля 2020

действительно плохо знакомы с программированием, python и OOP.

В Python3 и PyQt5 у меня есть несколько объектов: QLineEdit (s), определенные в Designer и загруженные с помощью uicload, я использую для получения входных данных, я нашел способ проверить их, мой список выглядит так :

        self.validatorint = QtGui.QIntValidator()
        self.inputguiwin.annualsalaryinput.setValidator(self.validatorint)
        self.inputguiwin.annualsalaryinput.textChanged.connect(self.check_state)
        self.inputguiwin.annualsalaryinput.textChanged.emit(self.inputguiwin.annualsalaryinput.text())        
        self.inputguiwin.annualsalaryinput.textChanged.connect(self.disablepushButtonOK)

        self.validatordouble = QtGui.QDoubleValidator(0.100, 1.00, 2)
        self.inputguiwin.tosaveinput.setValidator(self.validatordouble)
        self.inputguiwin.tosaveinput.textChanged.connect(self.check_state)
        self.inputguiwin.tosaveinput.textChanged.emit(self.inputguiwin.houseinput.text())        
        self.inputguiwin.tosaveinput.textChanged.connect(self.disablepushButtonOK)

        self.validatorint = QtGui.QIntValidator()
        self.inputguiwin.houseinput.setValidator(self.validatorint)
        self.inputguiwin.houseinput.textChanged.connect(self.check_state)
        self.inputguiwin.houseinput.textChanged.emit(self.inputguiwin.houseinput.text())   
        self.inputguiwin.houseinput.textChanged.connect(self.disablepushButtonOK)

        self.inputguiwin.pushButtonOK.setEnabled(False)

self.inputguiwin.annualsalaryinput является виджетом QLineEdit в главном GUI inputguiwin, затем у меня есть tosaveinput и houseinput. Вышеуказанные строки соединяют входы с функцией, которая изменяет цвет фона моего ввода, когда он проверяется и повторно активируется моей кнопкой OK

Думая о расширении количества входов, я задавался вопросом о способе итерации четыре строки кода для всех моих виджетов QLinesEdit.

Теперь я не очень разбираюсь в Python, классах, объектах и ​​так далее. Какой лучший или способ перебрать «список» моих виджетов? Я имею в виду, есть ли способ иметь список объектов в Python, как лучше всего перебирать виджеты в моем примере? хотя бы те, которые будут использовать один и тот же идентичный тип Qt Gui .QIntValidator ()?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Если вы хотите уменьшить свой код и сделать его более читабельным, вам придется использовать списки и перебирать их:

for lineedit, validator in (
    (self.inputguiwin.annualsalaryinput, QtGui.QIntValidator(),),
    (self.inputguiwin.tosaveinput, QtGui.QDoubleValidator(0.100, 1.00, 2),),
    (self.inputguiwin.houseinput, QtGui.QIntValidator(),),
):
    lineedit.setValidator(validator)
    lineedit.textChanged.connect(self.check_state)
    lineedit.textChanged.emit(lineedit.text())
    lineedit.textChanged.connect(self.disablepushButtonOK)
0 голосов
/ 21 апреля 2020

спасибо еще раз, я закончил с:

input_list_int=[self.inputguiwin.annualsalaryinput, self.inputguiwin.houseinput]
        for i in input_list_int:
            i_inputguiwin=i
            self.validatorint = QtGui.QIntValidator()
            i_inputguiwin.setValidator(self.validatorint)
            i_inputguiwin.textChanged.connect(self.check_state)
            i_inputguiwin.textChanged.emit(i_inputguiwin.text()) 
            i_inputguiwin.textChanged.connect(self.disablepushButtonOK)

input_list_double=[self.inputguiwin.tosaveinput]
        for i in input_list_double:
            i_inputguiwin=i
            self.validatordouble = QtGui.QDoubleValidator(0.100, 1.00, 2)
            i_inputguiwin.setValidator(self.validatordouble)
            i_inputguiwin.textChanged.connect(self.check_state)
            i_inputguiwin.textChanged.emit(i_inputguiwin.text())  
            i_inputguiwin.textChanged.connect(self.disablepushButtonOK)

очевидно, ваш метод лучше, я постараюсь копать больше в списках

...