如何解决如何在字典中的特定位置将PyQt5 QLineEdit响应存储到字典中
我一直在使用几行编辑从用户那里获取信息。我知道我可以使用textchanged()创建一个信号,然后将其连接到插槽中,从中可以提取用户在该行编辑中输入的文本。
但是现在假设我要将从特定行编辑获得的信息存储到字典中。例如,用户回答self.title = QLineEdit()
,这连接到一个插槽,该插槽填充词典的“ title”键中的响应。如果用户回答self.product= QLineEdit()
,则它会连接到与以前相同的插槽,但是现在在字典的“产品”键中填充响应。类似地,如果以后对这些行编辑进行了任何更改,则词典应使用新的响应进行更新。
我该怎么做?我想避免为每个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)
layout.addWidget(QLabel("Title"),1,0)
layout.addWidget(self.title,2)
layout.addWidget(QLabel("Date (dd/mm/yy)"),2,0)
layout.addWidget(self.date,2)
layout.addWidget(QLabel("Name"),3,0)
layout.addWidget(self.product,2)
layout.addWidget(QLabel("Serial Number (if available)"),4,0)
layout.addWidget(self.serialNum,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)
layout.addWidget(QLabel("Title"),1,0)
layout.addWidget(self.title,2)
layout.addWidget(QLabel("Date (dd/mm/yy)"),2,0)
layout.addWidget(self.date,2)
layout.addWidget(QLabel("Name"),3,0)
layout.addWidget(self.product,2)
layout.addWidget(QLabel("Serial Number (if available)"),4,0)
layout.addWidget(self.serialNum,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_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。