редактируемый QComboBox InsertPolicy = QComboBox.AtTop не вставляет новый текст - PullRequest
1 голос
/ 22 апреля 2020

Я попытался реализовать редактируемый QComboBox. Но если вы напишите новый элемент в QLineEdit редактируемого QComboBox, этот элемент не появится в списке QComboBox.

Должен ли я вставить новый текст дополнительно по коду?

Вот мой код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import \
    QWidget, QComboBox, QApplication, QVBoxLayout, QPushButton


class MyEditableComboBox(QComboBox):
    def __init__(self, parent=None, insert_at=QComboBox.InsertAtTop):
        super().__init__(parent)

        self.setEditable(True)
        # we wanna some new data

        self.setInsertPolicy(insert_at)
        # the new text should be inserted


class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        lyt = QVBoxLayout(self)
        self.setLayout(lyt)

        items = ["Burger",
                 "Chicken Wings",
                 "Pizza",
                 "Toast"]

        self.cbo = MyEditableComboBox(self)
        self.cbo.setMinimumWidth(200)
        self.cbo.addItems(items)
        lyt.addWidget(self.cbo)

        self.btn = QPushButton(self)
        self.btn.setText("Show Content of cbo")
        self.btn.clicked.connect(self._show_content_of_cbo)
        lyt.addWidget(self.btn)

    def _show_content_of_cbo(self):
        print("=" * 70)
        cbo = self.cbo
        for i in range(cbo.count()):
            print("{}: {}".format(i, cbo.itemText(i)))


app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

Если вы вставите «Стейк» в редактируемый файл QLineEdit, а затем нажмете на кнопку, то увидите результат:

======================================================================
0: Burger
1: Chicken Wings
2: Pizza
3: Toast

1 Ответ

3 голосов
/ 22 апреля 2020

Краткий ответ: после ввода «Стейк» нажмите клавишу Enter или Return .

Документация кажется неясной, когда элемент добавляется или нет. Недостаточно того, что вы пишете для его добавления, но QComboBox использует сигнал returnPressed от QLineEdit для добавления элемента. Поэтому решение состоит в том, чтобы выполнить какое-то действие, которое излучает этот сигнал, например, нажав клавишу Enter или Return .

...