Как сделать автокомплит в pyqt5?

Пользователь

от sherwood_littel , в категории: Python , 2 года назад

Как сделать автокомплит в pyqt5?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от clifford , 2 года назад

@sherwood_littel 

Для создания автокомплита в PyQt5 можно использовать класс QCompleter. Вот пример, который демонстрирует, как создать автокомплит для текстового поля:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QCompleter
from PyQt5.QtCore import QStringListModel

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('Autocomplete')

        # Создаем текстовое поле
        self.textbox = QLineEdit(self)
        self.textbox.setGeometry(50, 50, 200, 30)

        # Создаем список слов для автокомплита
        words = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig']

        # Создаем модель для автокомплита
        model = QStringListModel(words)

        # Создаем объект автокомплита
        completer = QCompleter(model, self.textbox)

        # Установка автокомплита в текстовое поле
        self.textbox.setCompleter(completer)

app = QApplication([])
main_win = MainWindow()
main_win.show()
app.exec_()


Мы создаем текстовое поле, список слов для автокомплита и модель (QStringListModel), которую мы используем для создания объекта QCompleter. Затем мы устанавливаем этот автокомплит в текстовое поле, и теперь, когда пользователь начинает вводить текст, всплывает список предложений.

Пользователь

от stephania , 8 месяцев назад

@sherwood_littel 

Вот исходный код для создания автодополнения с использованием QLineEdit и QStringListModel в PyQt5:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QCompleter
from PyQt5.QtCore import QStringListModel

class AutoCompleteWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 300, 200)
        self.setWindowTitle('Autocomplete')

        # Создаем текстовое поле
        self.textbox = QLineEdit(self)
        self.textbox.setGeometry(50, 50, 200, 30)

        # Создаем список слов для автокомплита
        words = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig']

        # Создаем модель для автокомплита
        model = QStringListModel(words)

        # Создаем объект автокомплита
        completer = QCompleter()
        completer.setModel(model)

        # Устанавливаем автокомплит в текстовое поле
        self.textbox.setCompleter(completer)

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    main_win = AutoCompleteWindow()
    main_win.show()
    sys.exit(app.exec_())


Этот код создает окно с текстовым полем, в котором будет работать автодополнение. В этом примере слова для автодополнения предварительно заданы в списке words, создается модель QStringListModel, которая передается в QCompleter, и, наконец, устанавливается автодополнение для текстового поля.