将使用 for 循环生成的 QLineEdit 小部件中的值相加

Posted

技术标签:

【中文标题】将使用 for 循环生成的 QLineEdit 小部件中的值相加【英文标题】:Adding together values from QLineEdit widgets generated with a for loop 【发布时间】:2019-02-09 08:52:12 【问题描述】:

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

单击“掷骰子”按钮后,它会触发一个函数,该函数会抓取附加输入字典的项目并尝试将它们添加在一起,将它们分配给另一个变量并将该变量添加到另一个变量,这是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]))

以上是“掷骰子”的相关代码

Here is a functional working example.目前需要在顶部的修饰符输入框中输入。问题在于使用“更多修饰符?”生成的输入框。按钮。这就是它仅将底部修饰符输入添加到应用启动时存在的最顶部修饰符输入框的地方。

我使用的是 python 3.7.2 和 windows 10。

【问题讨论】:

【参考方案1】:

我认为问题不是 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

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

【讨论】:

以上是关于将使用 for 循环生成的 QLineEdit 小部件中的值相加的主要内容,如果未能解决你的问题,请参考以下文章

根据来自 QComboBox 的用户输入添加和删除动态生成的 QLineEdit 小部件

女神节简单使用C/C++和Python嵌套for循环生成一个小爱心

第五周小总结

将文件拖入 QtGui.QLineEdit() 以设置 url 文本

Python中for循环相关的几个小练习,生成指定位数的验证码序列,移位加密

QLineEdit 对象的 PyQt 集合