前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt QTableView嵌入QComboBox

PyQt QTableView嵌入QComboBox

作者头像
bear_fish
发布2018-09-20 14:47:43
2K0
发布2018-09-20 14:47:43
举报

  关联文章:PyQt QTableView嵌入QCheckBox

  在Qt里,在QTableView中嵌入QComboBox真的很方便,只要实现一个QItemDelegate就可以了;QComboBox要想实现自定义下拉框也很方便,只要调用setView即可。PyQt示例代码如下:

#!/usr/bin/env python #coding=utf-8 from PyQt4.QtGui import * from PyQt4.QtCore import * class DBComboBoxDelegate(QItemDelegate): def __init__(self, comboModel, parent=None): QItemDelegate.__init__(self, parent) self.comboModel = comboModel def __createComboView(self, parent): view = QTableView(parent) view.setModel(self.comboModel) view.setAutoScroll(False) view.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) view.setSelectionMode(QAbstractItemView.SingleSelection) view.setSelectionBehavior(QAbstractItemView.SelectRows) view.resizeColumnsToContents() view.resizeRowsToContents() view.setMinimumWidth(view.horizontalHeader().length()) return view def createEditor(self, parent, option, index): combo = QComboBox(parent) #!! The important part: First set the model, then the view on the combo box combo.setModel(self.comboModel) #combo.setModelColumn(1) combo.setView(self.__createComboView(parent)) return combo def setEditorData(self, editor, index): value = index.model().data(index, Qt.EditRole).toString() editor.setCurrentIndex(editor.findText(value)) def setModelData(self, editor, model, index): if editor.currentIndex() >= 0: realidx = editor.model().index(editor.currentIndex(), 0) #确保取第一列的值 value = editor.model().data(realidx) model.setData(index, value, Qt.EditRole) ############################################################################### if __name__ == '__main__': import sys app = QApplication(sys.argv) table = QTableView() comboModel = QStandardItemModel(4, 2, table) comboModel.setHorizontalHeaderLabels(['Name', 'Description']) comboModel.setData(comboModel.index(0, 0, QModelIndex()), QVariant(u'树袋熊')) comboModel.setData(comboModel.index(0, 1, QModelIndex()), QVariant(u'生活在树上的熊')) comboModel.setData(comboModel.index(1, 0, QModelIndex()), QVariant(u'松鼠')) comboModel.setData(comboModel.index(1, 1, QModelIndex()), QVariant(u'可爱的松树精灵')) comboModel.setData(comboModel.index(2, 0, QModelIndex()), QVariant(u'大眼猴')) comboModel.setData(comboModel.index(2, 1, QModelIndex()), QVariant(u'这猴眼睛真大')) comboModel.setData(comboModel.index(3, 0, QModelIndex()), QVariant(u'猫头鹰')) comboModel.setData(comboModel.index(3, 1, QModelIndex()), QVariant(u'夜的精灵正站在树枝上')) model = QStandardItemModel(2, 3, table) model.setHorizontalHeaderLabels(['Name', 'Height', 'Weight']) model.setData(model.index(0, 0, QModelIndex()), QVariant(u'松鼠')) model.setData(model.index(0, 1, QModelIndex()), QVariant(u'80cm')) model.setData(model.index(0, 2, QModelIndex()), QVariant(u'12Kg')) table.setModel(model) table.setItemDelegateForColumn(0, DBComboBoxDelegate(comboModel, table)) table.horizontalHeader().setStretchLastSection(True) table.setGeometry(80, 20, 400, 300) table.setWindowTitle('Grid + Combo Testing') table.show() sys.exit(app.exec_())

  下面是在ubuntu下的效果图:

PyQt QTableView嵌入QComboBox - 银河军团 - 银河军团大本营
PyQt QTableView嵌入QComboBox - 银河军团 - 银河军团大本营
PyQt QTableView嵌入QComboBox - 银河军团 - 银河军团大本营
PyQt QTableView嵌入QComboBox - 银河军团 - 银河军团大本营
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年04月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档