for循环生成QLineEdit控件值求和问题:仅累加最后一个输入值
问题分析与解决方案
我一眼就看出问题所在啦——你在循环处理额外输入框的时候,每次迭代都会重新计算并覆盖self.modDieResult,而不是把每个输入框的值逐步累加进去。这就导致最终只有最后一个输入框的数值被加到结果里,前面的都被覆盖掉了!
原代码的问题点
看这段求和逻辑:
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]))
每次循环,你都把「骰子结果 + 初始Modifier + 当前输入框值」直接赋值给self.modDieResult,相当于每次都是从基础值重新加当前输入,而不是在之前的结果上继续累加。最后一次循环的结果就覆盖了所有之前的计算。
修改后的正确逻辑
我们需要先算出基础值,再把所有额外输入框的数值依次累加进去:
# 先计算基础部分:骰子结果 + 初始Modifier输入 base_result = int(self.dieResult) + int(self.inputs['modInput'].text()) # 初始化额外输入的总和为0 additional_sum = 0 # 遍历所有额外输入框,累加它们的数值 for input_widget in self.additionalInputs.values(): input_text = input_widget.text().strip() # 可选:处理非数字输入的情况,避免程序崩溃 try: additional_sum += int(input_text) except ValueError: # 这里可以根据需求改成弹窗提示,或者直接忽略无效输入 print(f"跳过无效输入:{input_text}") # 最终结果 = 基础值 + 所有额外输入的总和 self.modDieResult = str(base_result + additional_sum)
额外优化建议
- 不需要额外创建
self.newinputlist字典,直接遍历self.additionalInputs的value(也就是QLineEdit对象)就能拿到输入值,更简洁。 - 加入
try-except或者isdigit()判断,可以避免用户输入非数字内容导致程序报错,提升稳定性。
这样修改后,所有通过循环生成的额外输入框的值都会被正确累加,再也不会只算最后一个啦!
内容的提问来源于stack exchange,提问作者brettroyerr
相关产品推荐
相关产品推荐

