【问题标题】:populating pyqt5 inputs from dictionary selection从字典选择中填充 pyqt5 输入
【发布时间】:2019-02-01 20:06:58
【问题描述】:

我的 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)

这只会提取“詹姆斯”这个名字。在我在 comboBox_4 中选择 James 后,我希望我的 QLineEdit_1 填充“James@Gmail.com”,而我的 QLineEdit_2 填充“410-555-5555”。我怎样才能做到这一点? :/

【问题讨论】:

    标签: python python-3.x pyqt pyqt5


    【解决方案1】:

    在这种情况下,您不需要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_())
    


    试试这样的:

    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_())
    

    【讨论】:

    • 如果我的回答对你有帮助,别忘了标记为正确。
    • 在将其连接到我的代码时遇到一些重大问题...我的类窗口如下所示: 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) if name == "main" : 导入 sys app = QtWidgets.QApplication(sys.argv) app.setStyle('Fusion') MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow()
    • 我在答案中添加了一个选项试试
    • "NameError: 名称 'Ui_MainWindow' 未定义。"每次我尝试以任何方式更改代码时,它都不起作用。感谢您尝试帮助我,但似乎我无法弄清楚如何将您的代码与 pyqt 结合起来。我对 tkinter 的运气要好得多。如果这有帮助,这是我的代码的主要内容:imgur.com/a/LNKIGgL。在结束之前,我会再尝试一些东西。
    • 如果您有任何其他想法,请告诉我^^
    【解决方案2】:

    您必须将您的combobox 连接到event

    your_comboBox.activated.connect(your_function)
    

    然后在你的函数中更新两个QlineEdits

    【讨论】:

      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多