【问题标题】:How to put a QLineEdit into QTableView cell PyQt4?如何将 QLineEdit 放入 QTableView 单元格 PyQt4?
【发布时间】:2015-11-25 12:22:24
【问题描述】:

这是我的模型、视图和代理模型:

class example(QDialog):
    def __init__(self):
        super(druglist, self).__init__()
        self.setMinimumWidth(745)
        self.UI()
    def UI(self):
        self.table_view=QTableView()
        self.table_model=QStandardItemModel()
        self.table_proxy=QSortFilterProxyModel()
        self.table_proxy.setSourceModel(self.table_model)
        self.table_view.setModel(self.table_proxy)

我将为表格的每一列放置 QLineEdits 以进行过滤。 我该怎么做?

【问题讨论】:

  • 您的意思是对每个项目进行行编辑,还是仅对列标题进行编辑?
  • 仅用于列标题,例如我表的第一行中的一组行编辑。通过表内的行编辑搜索列中的项目(而不是外行编辑搜索字段)
  • @tmoreau 这对我不起作用

标签: python pyqt4 pyside qtableview qstandarditemmodel


【解决方案1】:

delegate 可以做到这一点。这是一个基本的例子。

表格视图的委托决定在编辑单元格时应该使用哪个小部件。在此示例中,委托仅应用于第一列。 QLineEdit 小部件的字符数限制为 3,因此您可以区分它与其他列(其他列看起来相同)之间的区别。

class ExampleDelegate(QtGui.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        line_edit = QtGui.QLineEdit(parent)
        line_edit.setMaxLength(3)
        return line_edit


class Example(QtGui.QDialog):
    def __init__(self,):
        super(Example, self).__init__()
        self.build_ui()

    def build_ui(self):       
        self.table_model = QtGui.QStandardItemModel(4, 2)
        self.delegate = ExampleDelegate()
        self.table_view = QtGui.QTableView()
        self.table_view.setItemDelegateForColumn(0, self.delegate)
        self.table_view.setModel(self.table_model)

        self.layout.addWidget(self.table_view)
        self.layout = QtGui.QGridLayout()
        self.setLayout(self.layout)

【讨论】:

  • 如果你想要一个预定义的选项列表@IMAN4K,你也可以让你的代理返回一个QComboBox
  • 非常感谢。但是对于我的一般用途(过滤列项目)我应该如何将 line_edit.textChanged 连接到我的代理模型(在子类 ItemDelegate 中)。我应该以不同的方式使用 ItemDelegate 吗?再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多