PYQT访问和更改动态添加的控件

时间:2017-04-05 20:34:02

标签: python python-3.x pyqt pyqt5

我是GUI&PYQT的初学者。我想要做的是动态设置QComboBox和QLineEdit的网格。从QComboBox中您可以选择一个选项,从该选项中,它将使用一些数字填充相应的QLineEdit。我遇到的问题是在第一个QComboBox和第一个QLineEdit框之间创建链接。我可以为每一行创建一个函数,但我想知道更好的方法。我将发布一些示例代码。感谢您提供任何帮助或建议。

import sys
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class window(QMainWindow):

    def __init__(self):
        super(window, self).__init__()
        self.setGeometry(50, 50, 700, 600)

        self.home()

    def home(self):
        Test1Choices = ['Test1:','Choice1', 'Choice2', 'Choice3', 'Choice4','Choice5', 'Choice6', 'Choice7', 'Choice8', 'Choice9']
        Test2Choices= ['Test2:','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
        for i in range(0,10):
            Choice1ComboBox = QComboBox(self)
            Choice1ComboBox.addItems(Test1Choices)
            Choice1ComboBox.resize(150,25)
            Choice1ComboBox.move(30,(150+(i*35)))
            Choice1ComboBox.setCurrentIndex(2)

            Choice2ComboBox = QComboBox(self)
            Choice2ComboBox.setObjectName("Choice2ComboBox"+str(i))
            Choice2ComboBox.addItems(Test2Choices)
            Choice2ComboBox.resize(75,25)
            Choice2ComboBox.move(200,(150+(i*35)))
            Choice2ComboBox.setCurrentIndex(2)
            Choice2ComboBox.activated[str].connect(self.doSomething)

            numTextBox = QLineEdit(self)
            numTextBox.setObjectName("numBox"+str(i))
            numTextBox.move(325,(150+(i*35)))
            numTextBox.resize(35,25)

            result1TextBox = QLineEdit(self)
            result1TextBox.setObjectName("result1Box"+str(i))
            result1TextBox.move(400,(150+(i*35)))
            result1TextBox.resize(100,25)
            result1TextBox.setEnabled(0)

            result2TextBox = QLineEdit(self)
            result2TextBox.setObjectName("result2Box"+str(i))
            result2TextBox.move(525,(150+(i*35)))
            result2TextBox.resize(100,25)
            result2TextBox.setEnabled(0)

        self.show()

    def doSomething(self):
        numbers=['result1','result2','result3','result4','result5','result6','result7','result8','result9','result10','result11','result12','result13','result14','result15']

def run():
    app = QApplication(sys.argv)
    Gui = window()
    sys.exit(app.exec_())


run()

总结一下,我想引入所选QComboBox的索引。然后使用该索引号来引用"数字"中的答案。阵列。然后将该结果打印在同一行的QLineEdit

1 个答案:

答案 0 :(得分:0)

我们使用sender()来获取发出信号的对象,然后我们用setObjectName()查找该对象的名称,然后我们搜索索引,然后我们用{{获取其他对象1}},例如输出将是所选文本的并集。

为Choice1ComboBox添加名称:

findChildren()

doSomething功能:

Choice1ComboBox.setObjectName("Choice1ComboBox"+str(i))

完整代码:

def doSomething(self, _):
    sender = self.sender()

    l = sender.objectName().split("Choice1ComboBox")
    if len(l) > 1:
        number = l[1]
    else:
        number = sender.objectName().split("Choice2ComboBox")[1]

    combo1 = self.findChildren(QComboBox, "Choice1ComboBox"+number)[0]
    combo2 = self.findChildren(QComboBox, "Choice2ComboBox"+number)[0]
    obj = self.findChildren(QLineEdit, "numBox"+number)[0]
    obj.setText(combo1.currentText() + " " +  combo2.currentText())