Python 如何将PyQt5 QLineEdit响应存储到字典中特定位置的字典中

Python 如何将PyQt5 QLineEdit响应存储到字典中特定位置的字典中,python,qt,pyqt,pyqt5,Python,Qt,Pyqt,Pyqt5,我一直在使用几行编辑从用户那里获取信息。我知道我可以使用textchanged()创建一个信号,然后将其连接到一个插槽,在该插槽中我可以提取用户为该行编辑输入的文本 但是现在假设我想将从特定行编辑中获得的信息存储到字典中。例如,用户回答self.title=QLineEdit(),这连接到一个插槽,该插槽填充字典“title”键中的响应。如果用户回答了self.product=QLineEdit(),这将连接到与以前相同的插槽,但现在会在字典的“product”键中填充响应。类似地,如果以后对这

我一直在使用几行编辑从用户那里获取信息。我知道我可以使用textchanged()创建一个信号,然后将其连接到一个插槽,在该插槽中我可以提取用户为该行编辑输入的文本

但是现在假设我想将从特定行编辑中获得的信息存储到字典中。例如,用户回答
self.title=QLineEdit()
,这连接到一个插槽,该插槽填充字典“title”键中的响应。如果用户回答了
self.product=QLineEdit()
,这将连接到与以前相同的插槽,但现在会在字典的“product”键中填充响应。类似地,如果以后对这些行编辑进行了任何更改,字典应该用新的响应进行更新

我该怎么做?我希望避免为每个QlineEdit创建单独的插槽,因为这可能会很乏味

answers = {"title": "", "Date": "", "Product": "", "Serial Num": ""}
  def projectDetailsUI(self):
      layout = QGridLayout()
      self.title = QLineEdit()
      self.title.setFixedWidth(300)
      
      self.date = QLineEdit()
      self.date.setFixedWidth(120)
      
      self.product = QLineEdit()
      self.product.setFixedWidth(300)
      
      self.serialNum = QLineEdit()
      self.serialNum.setFixedWidth(300)
      
      font = QFont()
      title = QLabel("Project Details")
      title.setFont(font)
      layout.addWidget(title, 0,0)
      
      layout.addWidget(QLabel("Title"), 1,0)
      layout.addWidget(self.title, 1, 2)

      layout.addWidget(QLabel("Date (dd/mm/yy)"), 2, 0)
      layout.addWidget(self.date, 2, 2)

      layout.addWidget(QLabel("Name"), 3, 0)
      layout.addWidget(self.product, 3, 2)

      layout.addWidget(QLabel("Serial Number (if available)"), 4, 0)
      layout.addWidget(self.serialNum, 4, 2)


由于您保留了指向每个QLineEdit的指针,因此您可以随时访问它们的
text
属性。只要文本发生任何更改,就会发出
textChanged
信号,不需要如此频繁的信号。相反,将每个键的
编辑完成
信号连接到一个插槽,在该插槽中,所有键都被赋值

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

answers = {"title": "", "Date": "", "Product": "", "Serial Num": ""}

class Template(QWidget):

    def __init__(self):
        super().__init__()
        self.projectDetailsUI()
        
    def projectDetailsUI(self):
        layout = QGridLayout(self)
        self.title = QLineEdit()
        self.title.setFixedWidth(300)

        self.date = QLineEdit()
        self.date.setFixedWidth(120)

        self.product = QLineEdit()
        self.product.setFixedWidth(300)

        self.serialNum = QLineEdit()
        self.serialNum.setFixedWidth(300)

        font = QFont()
        title = QLabel("Project Details")
        title.setFont(font)
        layout.addWidget(title, 0,0)

        layout.addWidget(QLabel("Title"), 1,0)
        layout.addWidget(self.title, 1, 2)

        layout.addWidget(QLabel("Date (dd/mm/yy)"), 2, 0)
        layout.addWidget(self.date, 2, 2)

        layout.addWidget(QLabel("Name"), 3, 0)
        layout.addWidget(self.product, 3, 2)

        layout.addWidget(QLabel("Serial Number (if available)"), 4, 0)
        layout.addWidget(self.serialNum, 4, 2)

        self.title.editingFinished.connect(self.set_answers)
        self.date.editingFinished.connect(self.set_answers)
        self.product.editingFinished.connect(self.set_answers)
        self.serialNum.editingFinished.connect(self.set_answers)

    def set_answers(self):
        answers['title'] = self.title.text()
        answers['Date'] = self.date.text()
        answers['Product'] = self.product.text()
        answers['Serial Num'] = self.serialNum.text()
            

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Template()
    window.show()
    sys.exit(app.exec_())