如何将 PyQt5 QLineEdit 响应存储到字典中特定位置的字典中
How to store PyQt5 QLineEdit responses into a dictionary at specific locations in dictionary
我一直在使用多行编辑从用户那里获取信息。我知道我可以使用 textchanged() 创建一个信号,然后将它连接到一个插槽,在那里我可以提取用户为该行编辑输入的文本。
但现在假设我想将从特定行编辑中获得的信息存储到字典中。例如,用户回答 self.title = QLineEdit()
,这连接到一个插槽,该插槽填充字典“标题”键中的响应。如果用户回答 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
信号在文本发生变化时发出,不需要如此频繁的信号。而是将每个人的 editingFinished
信号连接到一个插槽,所有键都被分配了值。
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_())
我一直在使用多行编辑从用户那里获取信息。我知道我可以使用 textchanged() 创建一个信号,然后将它连接到一个插槽,在那里我可以提取用户为该行编辑输入的文本。
但现在假设我想将从特定行编辑中获得的信息存储到字典中。例如,用户回答 self.title = QLineEdit()
,这连接到一个插槽,该插槽填充字典“标题”键中的响应。如果用户回答 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
信号在文本发生变化时发出,不需要如此频繁的信号。而是将每个人的 editingFinished
信号连接到一个插槽,所有键都被分配了值。
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_())