将使用 for 循环生成的 QLineEdit 小部件的值加在一起

Adding together values from QLineEdit widgets generated with a for loop

我正在尝试将使用 for 循环生成的 QLineEdit 框的值加在一起。然而,它只添加最后一个输入的输入,其余的被跳过。

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 是单击按钮后弹出窗口 window 中另一个 qlineedit 的值。上面的代码将输入放在一个名为 self.additionalInputs 的字典中,名称为 addnlInput1, addnlInput2..etc

单击 'Roll Dice' 按钮后,它会触发一个函数,该函数获取 additionalInputs dict 的项目并尝试将它们加在一起,将它们分配给另一个变量并将该变量添加到另一个变量,这是输出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]))

以上是'die roll'

的相关代码

Here is a functional working example. 目前您需要在顶部的修改器输入框中输入。问题在于使用 'More Modifiers?' 按钮生成的输入框。这就是它只将底部修饰符输入添加到应用程序启动时存在的最顶部修饰符输入框的地方。

我正在使用 python 3.7.2 和 windows 10。

我认为问题不是 Qt 特有的,而是在循环的最后一行:

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

在这里,您在循环的 each 次迭代中计算结果 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

注意:我还将keysvalues更改为kv,因为变量只包含一个single 键或值,不是多个。