как создать редактируемый комбинированный список со списком - PullRequest
0 голосов
/ 14 июля 2020

Я хочу создать редактируемое поле со списком в pyqt5, которое, когда пользователь что-то вводит, он получает результаты из списка с именами и помещает его в поле со списком.

Так, например, если пользователи вводят 'P ', Я хочу добавить все имена из списка, начинающиеся с P. Я пробовал несколько вещей, но безуспешно. Это то, что у меня есть на данный момент

Спасибо, что помогли мне, или направили меня в правильном направлении.

from PyQt5 import QtWidgets, uic
from testApp import Ui_MainWindow

names = ['Peter', 'Paul', 'Parker']

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.cboTestCombobox.editTextChanged.connect(lambda: self.getName(self.cboTestCombobox.currentText()))

    def getName(self, name):
        #self.cboTestCombobox.clear()
        if self.cboTestCombobox.currentText() != '':
            result = [i for i in names if name in i]
            self.cboTestCombobox.addItems(result)
        self.cboTestCombobox.showPopup()

app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec()

1 Ответ

1 голос
/ 14 июля 2020

Похоже, вам нужен QCompleter:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        names = ["Peter", "Paul", "Parker"]

        le = QtWidgets.QLineEdit()
        completer = QtWidgets.QCompleter(
            names, self, caseSensitivity=QtCore.Qt.CaseInsensitive
        )
        le.setCompleter(completer)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(le)
        lay.addStretch()

        self.resize(320, 120)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()

    sys.exit(app.exec_())
...