要实现在QStyledItemDelegate中弹出QCompleter而不需要文本输入,可以按照以下步骤进行:
class MyDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self, completer, parent=None):
super(MyDelegate, self).__init__(parent)
self.completer = completer
def createEditor(self, parent, option, index):
editor = QtWidgets.QLineEdit(parent)
editor.setCompleter(self.completer)
return editor
def setEditorData(self, editor, index):
text = index.data(QtCore.Qt.EditRole)
editor.setText(text)
def setModelData(self, editor, model, index):
text = editor.text()
model.setData(index, text, QtCore.Qt.EditRole)
completer = QtWidgets.QCompleter()
delegate = MyDelegate(completer)
tableView.setItemDelegate(delegate)
这样,当用户单击单元格时,将会立即弹出QCompleter的弹出窗口,而不需要文本输入。
完整的示例代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class MyDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self, completer, parent=None):
super(MyDelegate, self).__init__(parent)
self.completer = completer
def createEditor(self, parent, option, index):
editor = QtWidgets.QLineEdit(parent)
editor.setCompleter(self.completer)
return editor
def setEditorData(self, editor, index):
text = index.data(QtCore.Qt.EditRole)
editor.setText(text)
def setModelData(self, editor, model, index):
text = editor.text()
model.setData(index, text, QtCore.Qt.EditRole)
app = QtWidgets.QApplication([])
# 创建一个表视图
tableView = QtWidgets.QTableView()
# 创建一个模型
model = QtGui.QStandardItemModel(4, 2)
model.setHorizontalHeaderLabels(["Column 1", "Column 2"])
tableView.setModel(model)
# 创建一个QCompleter
completer = QtWidgets.QCompleter(["Item 1", "Item 2", "Item 3"])
completer.setCompletionMode(QtWidgets.QCompleter.PopupCompletion)
# 创建一个自定义委托
delegate = MyDelegate(completer)
# 将委托设置给表视图
tableView.setItemDelegate(delegate)
tableView.show()
app.exec_()
运行示例代码,当你单击表视图中的单元格时,将会立即弹出QCompleter的弹出窗口,而无需手动输入文本。
上一篇:不需要为null值返回