按顺序迭代行编辑小部件

时间:2017-03-05 06:54:00

标签: python-3.x pyqt5

我有一段代码迭代LineEdit小部件来构建一个字符串。我遇到的问题是它似乎随机迭代使解析字符串变得非常困难。

for widget in qApp.allWidgets():
    if isinstance(widget, QLineEdit):
       insertQuery += widget.displayText()

2 个答案:

答案 0 :(得分:1)

allWidgets()不保证任何特定订单。有几种方法可以实现您的目标。

  • 您可以手动创建窗口小部件列表并对其进行迭代。
  • 您可以指定标签顺序,然后使用nextInFocusChain()移至订单中的下一个项目。
  • 添加一些带有订单号的属性,并将文本值收集到dict,并将订单号作为键,然后加入值。
  • 与上一个版本类似,您可以使用QLineEdit的某些命名约定,例如向窗口小部件添加订单号objectName

您选择哪种方式取决于您,具体取决于您创建UI的方式。

答案 1 :(得分:0)

好的,我有一个解决方案,感谢@mFoxRU

首先,我在循环中设置objectName以创建行编辑对象

LineEdit.setObjectName(str(i))

然后我使用FocusOut将行编辑对象的值设置为字典

LEDict = {'1': '', '2': '', '3': '', '4': '', '5': '', '6': '', '7': '', '8': '', '9': '', '10': '', '11': '', '12': ''}
if event.type() == QEvent.FocusOut:
            LEDict[widget.objectName()] = widget.displayText()
            return False

最后,我使用范围迭代字典,我可以使用它来构造sql语句

for i in range(12):
            x = i + 1
            print(LEDict[str(x)])

实际上,我已经取消了for循环,转而使用单个语句直接调用字典元素来构造sql代码。

testInsert = "Insert INTO address VALUES(" + LEDict["1"] + ", " + LEDict["2"] + ")"