Добавление значений из виджетов QLineEdit, сгенерированных с помощью цикла for - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь сложить значения полей QLineEdit, сгенерированных с помощью цикла for.Однако это только добавление ввода последнего ввода, а остальные пропускаются.

for i in range(self.numInputsToAdd):
    self.additionalInputs["addnlInput" + str(i + 1)] = QLineEdit(self)
    self.additionalInputs["addnlInput" + str(i + 1)].setAlignment(Qt.AlignRight)
    self.additionalInputs["addnlInput" + str(i + 1)].setText("1")
    self.additionalInputs["addnlInput" + str(i + 1)].setPlaceholderText("Additional Mod Input #" + str(i + 1))
    self.vertCol.addWidget(self.additionalInputs["addnlInput" + str(i + 1)])

Вот как я сейчас генерирую вводимые данные, self.numInputsToAdd - это значение другого qlineedit из всплывающего окна после нажатия кнопки.Приведенный выше код помещает входные данные в диктовку с именем self.additionalInputs с именем addnlInput1, addnlInput2..etc

. После нажатия кнопки «Roll Dice» запускается функция, которая захватывает элементы dict AdditionalInputs и пытаетсясложите их вместе, назначьте их другой переменной и добавьте эту переменную к другой, которая является выводом randint(1, n)

self.dieResult = str(randint(1, n))
self.newinputlist = {}
for keys, vals in self.additionalInputs.items():
    self.newinputlist[keys] = self.additionalInputs[keys].text()
    print(self.newinputlist[keys])
    self.modDieResult = str(int(self.dieResult) + int(self.inputs['modInput'].text()) + int(self.newinputlist[keys]))

Выше приведен соответствующий код для «броска кубика»

Вот функциональный рабочий пример. В настоящее время вам нужен ввод в верхнем поле ввода Модификатора.Проблема заключается в полях ввода, которые генерируются с помощью «Больше модификаторов?»кнопка.Вот где он добавляет только нижний ввод модификатора в самый верхний блок ввода модификатора, который появляется при запуске приложения.

Я использую python 3.7.2 и windows 10.

1 Ответ

0 голосов
/ 09 февраля 2019

Я думаю, что проблема не в Qt, а в последней строке вашего цикла:

self.modDieResult = str(int(self.dieResult) + int(self.inputs['modInput'].text()) + int(self.newinputlist[keys]))

Здесь вы вычисляете результат self.modDieResult на на каждой итерации цикла,Результат этого вычисления присваивается self.modDieResult, что означает, что в конце он будет иметь только окончательное вычисленное значение.

Чтобы сделать промежуточную сумму, вам понадобится дополнительная переменная, например,

self.dieResult = str(randint(1, n))
self.newinputlist = {}

# Store the initial modInput value.
modInputResults = int(self.inputs['modInput'].text())

for k, v in self.additionalInputs.items():
    self.newinputlist[k] = self.additionalInputs[k].text()
    print(self.newinputlist[k])

    # On each loop, add the value for the additional elements.
    # Note you could do: int(v.text()) without the additional newinputlist.
    modInputResults = modInputResults + int(self.newinputlist[k])

self.modDieResult = self.dieResult + modInputResults

Примечание: я также изменил keys, values на k, v, поскольку переменная содержит только один ключ или значение, а не несколько.

...