заполнение PyQT5 входов из словаря выбора - PullRequest
0 голосов
/ 01 февраля 2019

У меня возникли проблемы с моим комбинированным списком pyqt5.Как я могу настроить таргетинг на вторичные фрагменты данных (электронная почта, тел. #) И отправить их на другие входы после выбора первичных данных?

Словарь:

autocompleteList2 = {
    'James': ['James@Gmail.com', '410-555-5555']
}

model2 = QStringListModel()
model2.setStringList(autocompleteList2)
completer2 = QCompleter()
completer2.setModel(model2)
self.comboBox_4.setCompleter(completer2)
self.comboBox_4.addItems(autocompleteList2)

Это только тянетимя "Джеймс"Я хочу, чтобы мои QLineEdit_1 заполнились "James@Gmail.com", а мои QLineEdit_2 - "410-555-5555" после того, как я выбрал Джеймса в comboBox_4.Как я могу это сделать?: /

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

В этом случае вам не нужно QCompleter.Попробуйте приведенный ниже пример:

from PyQt5 import QtCore, QtGui, QtWidgets

class Window(QtWidgets.QMainWindow):
    def __init__(self, cList):
        super().__init__()

        self.cList = cList

        self.lineEdit_1 = QtWidgets.QLineEdit()
        self.lineEdit_2 = QtWidgets.QLineEdit()
        layoutH = QtWidgets.QHBoxLayout()
        layoutH.addWidget(self.lineEdit_1)
        layoutH.addWidget(self.lineEdit_2)

#        completer = QtWidgets.QCompleter(self)
#        model     = QtCore.QStringListModel()
#        completer.setModel(model)

        self.comboBox_4 = QtWidgets.QComboBox()
#        self.comboBox_4.setCompleter(completer)
        self.comboBox_4.addItems(sorted(cList.keys())) 
        self.comboBox_4.activated[str].connect(self.onActivatedText)

        layoutV = QtWidgets.QVBoxLayout()
        layoutV.addLayout(layoutH)
        layoutV.addWidget(self.comboBox_4)

        centralWidget = QtWidgets.QWidget()
        centralWidget.setLayout(layoutV)
        self.setCentralWidget(centralWidget)

    @QtCore.pyqtSlot(str)
    def onActivatedText(self, text):
        self.lineEdit_1.setText(self.cList[text][0])
        self.lineEdit_2.setText(self.cList[text][1])


autocompleteList2 = {
    'James-1': ['James111@Gmail.com', '410-111-1111'],
    'James-2': ['James222@Gmail.com', '410-222-2222'],
    'James-3': ['James333@Gmail.com', '410-333-3333'],
}

if __name__ == '__main__':
    import sys
    app  = QtWidgets.QApplication(sys.argv)
    w = Window(autocompleteList2)
    w.show()
    sys.exit(app.exec_())

enter image description here


Попробуйте что-то вроде этого:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
        MainWindow.setObjectName("MainWindow") 
        MainWindow.setEnabled(True) 
        MainWindow.resize(480, 637) 
        MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) 
        MainWindow.setAnimated(True) 

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
# ...
        self.lineEdit_1 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)  
        self.comboBox_4 = QtWidgets.QComboBox(self.centralwidget)        
# ...
        MainWindow.setCentralWidget(self.centralwidget)



class Window(QtWidgets.QMainWindow, Ui_MainWindow):        # + Ui_MainWindow
    def __init__(self, cList):
        super().__init__()

        self.setupUi(self)                                 # +++

        self.cList = cList

#        self.lineEdit_1 = QtWidgets.QLineEdit()
#        self.lineEdit_2 = QtWidgets.QLineEdit()
        layoutH = QtWidgets.QHBoxLayout()
        layoutH.addWidget(self.lineEdit_1)
        layoutH.addWidget(self.lineEdit_2)

#        self.comboBox_4 = QtWidgets.QComboBox()
        self.comboBox_4.addItems(sorted(cList.keys())) 
        self.comboBox_4.activated[str].connect(self.onActivatedText)

#        layoutV = QtWidgets.QVBoxLayout()
        layoutV = QtWidgets.QVBoxLayout(self.centralwidget)   # self.centralwidget
        layoutV.addLayout(layoutH)
        layoutV.addWidget(self.comboBox_4)

#        centralWidget = QtWidgets.QWidget()
#        centralWidget.setLayout(layoutV)
#        self.setCentralWidget(centralWidget)



    @QtCore.pyqtSlot(str)
    def onActivatedText(self, text):
        self.lineEdit_1.setText(self.cList[text][0])
        self.lineEdit_2.setText(self.cList[text][1])


autocompleteList2 = {
    'James-1': ['James111@Gmail.com', '410-111-1111'],
    'James-2': ['James222@Gmail.com', '410-222-2222'],
    'James-3': ['James333@Gmail.com', '410-333-3333'],
}

if __name__ == '__main__':
    import sys
    app  = QtWidgets.QApplication(sys.argv)
    w = Window(autocompleteList2)
    w.show()
    sys.exit(app.exec_())
0 голосов
/ 01 февраля 2019

Вы должны подключить combobox к event с помощью:

your_comboBox.activated.connect(your_function)

Затем в вашей функции вы обновите два QlineEdits.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...