【问题标题】:How to get all text from qlineedit如何从 qlineedit 获取所有文本
【发布时间】:2021-01-08 06:56:55
【问题描述】:

我只想知道在单击“执行值”按钮后如何存储所有 qline 编辑文本中的所有值,截至目前,只有它采用的最近值, 如何遍历所有输入并获取所有单个变量:

def __init__(self):
    super().__init__()
    self.title = 'Sample Dynamic LineEdit'
    self.left = 150
    self.top = 150
    self.width = 400
    self.height = 500
    self.i = 40
    self.j = 80
    self.counter = 1
    self.initUI()

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)

    # Create textbox
    # self.textbox = QLineEdit(self)
    # self.textbox.move(20, 20)
    # self.textbox.resize(280, 40)

    # Create a button in the window
    self.button = QPushButton('Add Line Edit', self)

    # connect button to function on_click
    self.button.clicked.connect(self.on_click)
    self.show()
    pybutton = QPushButton('Execute the entered values', self)
    pybutton.clicked.connect(self.text_click)
    pybutton.resize(160, 35)
    pybutton.move(150, 0)
    pybutton.show()

@pyqtSlot()
def on_click(self):
    # this creates a new field and label everytime the button is clicked
    self.textbox = QLineEdit(self)
    self.textbox2 = QLineEdit(self)

    self.label = QLabel(self)
    self.label.setText(str(self.counter))
    self.label.move(5, self.i)
    self.button.move(20, self.j)
    self.textbox.move(20, self.i)
    self.textbox.resize(160, 40)
    self.textbox2.move(250, self.i)
    self.textbox2.resize(160, 40)

    # dynamic object names
    self.textbox.setObjectName("text" + str(self.counter))
    self.textbox.show()
    self.textbox2.show()
    self.label.show()
    self.i += 40
    self.j += 40
    self.counter += 1
    print(self.textbox.objectName())

def text_click(self):
    first = self.textbox.text()
    
    print('Your name: ' + first)
    second = self.textbox2.text()
    print('Your name: ' + second)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:

    您可以为每个 QLineEdit 命名,然后使用 findChild 访问它们:

        ...
        # dynamic object names
        self.textbox.setObjectName("text_" + str(self.counter))
        self.textbox2.setObjectName("text2_" + str(self.counter))
        ...
    
    def text_click(self):
        for i in range(1, self.counter):
            first = self.findChild(QLineEdit, "text_" + str(i)).text()
    
            print('Your name: ' + first)
            second = self.findChild(QLineEdit, "text2_" + str(i)).text()
            print('Your name: ' + second)
    

    但恕我直言,将 QLineEdit 对象添加到普通列表更简单:

    ...
        self.counter = 1
        self.textboxes = []
        self.textboxes2 = []
        self.initUI()
    ...
    @Slot()
    def on_click(self):
        # this creates a new field and label everytime the button is clicked
        textbox = QLineEdit(self)
        textbox2 = QLineEdit(self)
        self.textboxes.append(textbox)
        self.textboxes2.append(textbox2)
    
        label = QLabel(self)
        label.setText(str(self.counter))
        label.move(5, self.i)
        self.button.move(20, self.j)
        textbox.move(20, self.i)
        textbox.resize(160, 40)
        textbox2.move(250, self.i)
        textbox2.resize(160, 40)
    
        # dynamic object names
        textbox.setObjectName("text_" + str(self.counter))
        textbox2.setObjectName("text2_" + str(self.counter))
        textbox.show()
        textbox2.show()
        label.show()
        self.i += 40
        self.j += 40
        self.counter += 1
        print(textbox.objectName())
    
    def text_click(self):
        for i in range(self.counter - 1):
            first = self.textboxes[i].text()
    
            print('Your name: ' + first)
            second = self.textboxes2[i].text()
            print('Your name: ' + second)
    ...
    

    在 Python 中,将对象存储在列表中很便宜,因为列表将只包含对该对象的引用。这里唯一的缺点是 Qt 对象是内部 C++ 对象,可以独立于它们的 Python 引用来销毁。所以你必须注意一旦它们被销毁就不要使用它们。

    【讨论】:

    • 嗨@Serge Ballesta,这对我帮助很大,感谢您对Serge 的支持。你会建议我通过 qt 设计器然后转换为 py 脚本以进行进一步开发,或者最好通过编码脚本本身开发。
    • 嗨@Serge Ballesta,我如何创建一个按钮,以便在此行编辑中输入所有值后,我需要一个清除所有值的按钮..
    • @NishadNazar:设计器是一个很好的工具,应该用于任何静态界面设计,因为您会立即看到界面的外观。对于运行时动态接口,它仍然可以用于初始设计。并且不要忘记 layouts ,它提供了很好的可重新调整的界面。但是,如果您确实需要在运行时添加子小部件,您将只能使用该部分的直接代码。
    • @NishadNazar:您已经知道如何在运行时创建小部件并为其命名。在这里,您可以为每行创建一个新的 QPushButton 并将它们全部连接到主小部件中的同一个插槽(顺便说一句,将小部件命名为 app 是一种奇怪的约定,会让未来的读者感到惊讶......)。然后在该槽中,您将使用sender 来识别单击的按钮,并在相关的 QLineEdit 小部件上采取相应的行动。
    • 当然我会试试这个。谢谢谢尔盖
    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多