我为qgis开发python插件。在这个插件中,我创建了一个有3列的qtablewidget。这些列是qcheckbox、qtablewidgetitem和qcombobox。我想检索这3列中包含的值。目前,我设法获得了qcombobox和qtablewidgetitem的值,但似乎无法获得qcheckbox的值。
liste = ['Carte 1','Carte 2','Carte 3','Carte 4','Carte 5','Carte 6']
combo_box_options = ["A4 Paysage","A4 Portrait", "A3 Paysage","A3 Portrait"]
self.dlg_format = Dialog_format()
self.dlg_format.tableWidget.setRowCount(len(liste))
for index in range(len(liste)):
item = QTableWidgetItem(liste[index])
self.dlg_format.tableWidget.setItem(index, 1, item)
self.dlg_format.tableWidget.setColumnWidth(0, 20)
self.dlg_format.tableWidget.setColumnWidth(1, 350)
combo = QComboBox()
for t in combo_box_options:
combo.addItem(t)
self.dlg_format.tableWidget.setCellWidget(index, 2, combo)
widget = QWidget()
checkbox = QCheckBox()
checkbox.setCheckState(Qt.Checked)
playout = QHBoxLayout(widget)
playout.addWidget(checkbox)
playout.setAlignment(Qt.AlignCenter)
playout.setContentsMargins(0,0,0,0)
widget.setLayout(playout)
self.dlg_format.tableWidget.setCellWidget(index, 0, widget)
self.dlg_format.show()
result = self.dlg_format.exec_()
if result:
for index in range(len(liste)):
text = self.dlg_format.tableWidget.item(index, 1).text()
format = self.dlg_format.tableWidget.cellWidget(index, 2).currentText()
check = self.dlg_format.tableWidget.cellWidget(index, 0).checkState() #Does not work
1条答案
按热度按时间8ljdwjyq1#
qwidget被设置为cell widget,而不是checkbox,而且这个widget显然没有
checkState
属性。这种情况有多种可能性。
使复选框成为小部件的属性:
使复选框
checkState
小部件的函数引用(注意:没有括号!)以便您可以使用现有的cellWidget(index, 0).checkState()
:因为所有的事件都发生在同一个范围内(函数),所以可以完全忽略
cellWidget
并使用包含小部件的元组列表:请注意:
checkState()
返回一个Qt.CheckState
枚举,结果为2(Qt.Checked
)对于复选框;如果需要布尔值,请使用isChecked()
相反;你可以用
enumerate
而不是range
,因为您仍在遍历列表项:for index, text in enumerate(liste):
;如果您不需要添加项目数据,并且组合的内容总是相同的,只需使用
combo.addItems(combo_box_options)
;为每个循环设置列宽是没有意义的,只需在
for
回路;如果你使用
QHBoxLayout(widget)
没有必要widget.setLayout(playout)
,因为布局上的小部件参数已经设置了小部件上的布局;创建示例属性是为了使它们持久化(它确保它们不会被垃圾收集并允许将来访问);从代码来看,在该函数返回后,似乎不太可能使用该对话框示例,因此将其作为示例的成员(
self.dlg_format
)是不需要的,并保持不必要的资源占用:对话框将保留在内存中,即使它关闭,然后将被删除和覆盖,一旦它再次创建;把它变成一个局部变量(dlg_format = Dialog_format()
);