Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向QTableWidget显示可选中组合框的文本_Python_Pyqt_Pyqt5_Qtablewidget_Qcombobox - Fatal编程技术网

Python 向QTableWidget显示可选中组合框的文本

Python 向QTableWidget显示可选中组合框的文本,python,pyqt,pyqt5,qtablewidget,qcombobox,Python,Pyqt,Pyqt5,Qtablewidget,Qcombobox,我的代码有一个带有复选框的组合框,每次我选中复选框时,我都想在QTableWidget行中显示文本,如果选中复选框,我想从QTableWidget中删除该行 虽然最初使用QTableWidget和QCombobox来管理逻辑看起来很简单,但从长远来看,可能会很复杂。更优雅的解决方案是使用一个模型,该模型将由QComboBox和QTableView共享,其中过滤由QSortFilterProxyModel完成,当共享这两个元素时,同一个模型将在QTableWidget中看到复选框,该复选框将随委托

我的代码有一个带有复选框的组合框,每次我选中复选框时,我都想在QTableWidget行中显示文本,如果选中复选框,我想从QTableWidget中删除该行

虽然最初使用QTableWidget和QCombobox来管理逻辑看起来很简单,但从长远来看,可能会很复杂。更优雅的解决方案是使用一个模型,该模型将由QComboBox和QTableView共享,其中过滤由QSortFilterProxyModel完成,当共享这两个元素时,同一个模型将在QTableWidget中看到复选框,该复选框将随委托一起删除

从PyQt5导入QtCore、QtGui、qtwidget
类CheckedFilterProxyModel(QtCore.QSortFilterProxyModel):
def filterAcceptsRow(自身、源行、源父行):
index=self.sourceModel().index(源\行,0,源\父)
返回index.data(QtCore.Qt.CheckStateRole)=QtCore.Qt.Checked
类RemoveCheckBoxDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self、option、index):
super(RemoveCheckBoxDelegate,self).initStyleOption(option,index)
option.features&=~qtwidts.QStyleOptionViewItem.HasCheckIndicator
类小部件(qtwidts.QWidget):
def uuu init uuu(self,parent=None):
超级(小部件,自我)。\uuuuu初始化\uuuuuuu(父级)
self.m_combobox=qtwidts.QComboBox()
self.m_tableview=qtwidts.QTableView()
self.m_model=QtGui.QStandardItemModel(0,2)
self.m_proxy=checkedFilterProxy模型(self)
self.m_proxy.setSourceModel(self.m_模型)
self.m_combobox.setModel(self.m_模型)
self.m_tableview.setModel(self.m_proxy)
delegate=RemoveCheckBoxDelegate(自)
self.m_tableview.setItemDelegateForColumn(0,委托)
lay=qtwidts.QVBoxLayout(self)
lay.addWidget(self.m_组合框)
lay.addWidget(self.m_tableview)
选项=[“Test1”、“Test2”、“Test3”]
self.fill_组合框(选项)
def fill_组合框(自身,选项):
self.m_model.clear()
对于选项中的选项:
item=QtGui.QStandardItem(选项)
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setData(QtCore.Qt.Unchecked,QtCore.Qt.CheckStateRole)
项目=[项目]+[
范围内u的QtGui.QStandardItem()(self.m_model.rowCount()-1)
]
self.m_model.appendRow(项目)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=Widget()
w、 show()
sys.exit(app.exec_())

为什么要使用QTableWidget?QTableWidget有多少列?如果您只想显示一个文本,我认为QListView或QListWidget就足够了,我需要显示选中复选框中的文本以及一些计数。因此,QTableWidget应该至少有2列,并且当您选择/取消选择复选框时,行应该增加或减少。非常感谢您的快速响应。它的工作原理完全符合我的要求。我可以在这个代码中执行以下操作吗?问题1:如果我必须将QTableView中的列数限制为2,那么我应该怎么做?使用上述代码,QTableView中的列数比列表“选项”的长度少一个。我不需要额外的列。问题2:如何将列标题重命名为某些字符串而不是数字1、2?