Comment stocker les réponses PyQt5 QLineEdit dans un dictionnaire à des emplacements spécifiques dans le dictionnaire
J'ai utilisé plusieurs modifications de ligne pour obtenir des informations de l'utilisateur. Je sais que je peux créer un signal en utilisant textchanged(), puis le connecter à un emplacement où je peux extraire le texte que l'utilisateur a inséré pour cette modification de ligne.
Mais supposons maintenant que je veuille stocker ces informations obtenues à partir des modifications de ligne spécifiques dans un dictionnaire. Par exemple, l'utilisateur répond au self.title = QLineEdit()
, cela se connecte à un slot qui remplit la réponse dans la clé "title" du dictionnaire. Si l'utilisateur répond à self.product= QLineEdit()
, cela se connecte au même emplacement qu'auparavant, mais remplit désormais la réponse dans la clé "Produit" du dictionnaire. De même, si des modifications sont apportées ultérieurement à ces modifications de ligne, le dictionnaire doit être mis à jour avec les nouvelles réponses.
Comment puis-je faire ceci? Je veux éviter de créer des emplacements séparés pour chaque QlineEdit car cela peut être fastidieux.
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)
Réponses
Puisque vous conservez des pointeurs vers chaque QLineEdit, vous pouvez accéder à leur text
propriété à tout moment. Le textChanged
signal est émis chaque fois que le texte est modifié, un signal aussi fréquent n'est pas nécessaire. Au lieu de cela, connectez le signal de chacun editingFinished
à un seul emplacement où toutes les touches sont affectées de valeurs.
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_())