可编辑的 QComboBox InsertPolicy=QComboBox.AtTop 不插入新文本
editable QComboBox InsertPolicy=QComboBox.AtTop doesn't insert new text
我试图实现一个可编辑的 QComboBox。但是如果你在可编辑的QComboBox的QLineEdit中写了一个新的项目,这个元素不会出现在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 中插入 "Steak",然后单击按钮,我会看到输出:
======================================================================
0: Burger
1: Chicken Wings
2: Pizza
3: Toast
简答:输入 "Steak" 后按 Enter 或 Return 键。
文档似乎不清楚何时添加或不添加项目。仅编写要添加的内容是不够的,但 QComboBox 使用 QLineEdit 的 returnPressed 信号来添加项目。因此解决方案是执行一些发出该信号的操作,例如按 Enter 或 Return 键。
我试图实现一个可编辑的 QComboBox。但是如果你在可编辑的QComboBox的QLineEdit中写了一个新的项目,这个元素不会出现在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 中插入 "Steak",然后单击按钮,我会看到输出:
======================================================================
0: Burger
1: Chicken Wings
2: Pizza
3: Toast
简答:输入 "Steak" 后按 Enter 或 Return 键。
文档似乎不清楚何时添加或不添加项目。仅编写要添加的内容是不够的,但 QComboBox 使用 QLineEdit 的 returnPressed 信号来添加项目。因此解决方案是执行一些发出该信号的操作,例如按 Enter 或 Return 键。