Python 如何获得多个QComboxes';来自QTableWidget的文本
我已经用setCellWidget在QTableWidget中插入了很多qcombox(我不知道qcombox的数量,因为它来自MySQL)。但当我想从表中获取它的文本时Python 如何获得多个QComboxes';来自QTableWidget的文本,python,qt,qt4,pyqt,pyqt4,Python,Qt,Qt4,Pyqt,Pyqt4,我已经用setCellWidget在QTableWidget中插入了很多qcombox(我不知道qcombox的数量,因为它来自MySQL)。但当我想从表中获取它的文本时 self.table.item(0,1).itemText() 或 或 它不起作用。 通常我可以通过combobox.currentText()获取文本,但表中有许多组合框,我不知道行和列(x,y)信息。因此,我应该使用类似于.item(14,1)的东西。text()如果您使用了setCellWidget,那么调用cell
self.table.item(0,1).itemText()
或
或
它不起作用。
通常我可以通过
combobox.currentText()
获取文本,但表中有许多组合框,我不知道行和列(x,y)信息。因此,我应该使用类似于.item(14,1)的东西。text()如果您使用了setCellWidget
,那么调用cellWidget(0,1)
而不是item(0,1)
将返回一个QWidget,而不是QTableWidgetItem
您可能需要将此QWidget强制转换为QComboBox,但是如果您使用了
setCellWidget
,那么您应该能够调用currentText()
,然后调用cellWidget(0,1)
而不是item(0,1)
将返回一个QWidget,而不是一个QTableWidgetItem
您可能需要将此QWidget强制转换为QComboBox,但是如果您想使用,您应该能够调用currentText()
self.table.item(0,1).itemText()
或
或
我不能直接使用项目小部件。我建议您使用item delegateQtGui.QItemDelegate
,有关更多信息,您可以在qt示例中搜索以实现此委托,我没有什么示例,希望对您有所帮助
import sys
from PyQt4 import QtGui, QtCore
class QCustomDelegate (QtGui.QItemDelegate):
def __init__(self, *args, **kwargs):
QtGui.QItemDelegate.__init__(self, *args, **kwargs)
self.listsData = ['Data 1', 'Data 2', 'Data 3']
def createEditor (self, parentQWidget, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
editorQWidget = QtGui.QComboBox(parentQWidget)
editorQWidget.clear()
for data in self.listsData:
editorQWidget.addItem(data)
return editorQWidget
else:
return QtGui.QItemDelegate.createEditor(self, parentQWidget, optionQStyleOptionViewItem, indexQModelIndex)
def setEditorData (self, editorQWidget, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
index, _ = indexQModelIndex.model().data(indexQModelIndex, QtCore.Qt.EditRole).toInt()
editorQWidget.setCurrentIndex(index)
else:
QtGui.QItemDelegate.setEditorData(self, editorQWidget, indexQModelIndex)
def setModelData (self, editorQWidget, modelQAbstractItemModel, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
index = editorQWidget.currentIndex()
modelQAbstractItemModel.setData(indexQModelIndex, index, QtCore.Qt.EditRole)
else:
QtGui.QItemDelegate.setModelData(self, editorQWidget, modelQAbstractItemModel, indexQModelIndex)
def updateEditorGeometry(self, editorQWidget, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
editorQWidget.setGeometry(optionQStyleOptionViewItem.rect)
else:
QtGui.QItemDelegate.updateEditorGeometry(self, editorQWidget, optionQStyleOptionViewItem, indexQModelIndex)
def paint (self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
value, _ = indexQModelIndex.model().data(indexQModelIndex, QtCore.Qt.EditRole).toInt()
self.drawDisplay(painterQPainter, optionQStyleOptionViewItem, optionQStyleOptionViewItem.rect, QtCore.QString(self.listsData[value]));
else:
QtGui.QItemDelegate.paint(self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex)
class QCustomTableWidget (QtGui.QTableWidget):
def __init__ (self, parent = None):
super(QCustomTableWidget, self).__init__(parent)
# Setup row & column data
listsVerticalHeaderItem = ['Device 1', 'Device 2', 'Device 3', 'Device 4', 'Device 5']
self.setRowCount(len(listsVerticalHeaderItem))
for index in range(self.rowCount()):
self.setVerticalHeaderItem(index, QtGui.QTableWidgetItem(listsVerticalHeaderItem[index]))
self.setColumnCount(5)
listsHorizontalHeaderItem = ['Option 1', 'Option 2']
self.setColumnCount(len(listsHorizontalHeaderItem))
for index in range(self.columnCount()):
self.setHorizontalHeaderItem(index, QtGui.QTableWidgetItem(listsHorizontalHeaderItem[index]))
self.myQCustomDelegate = QCustomDelegate()
self.setItemDelegate(self.myQCustomDelegate)
# Test insert data
index = 2
self.setItem(0, 0, QtGui.QTableWidgetItem(str(index)))
# Test read data
index = int(self.item(0, 0).text())
print self.myQCustomDelegate.listsData[index]
if __name__ == '__main__':
myQApplication = QtGui.QApplication(sys.argv)
myQCustomTableWidget = QCustomTableWidget()
myQCustomTableWidget.show()
sys.exit(myQApplication.exec_())
QtGui.QItemDelegate
参考:
旋转框委托示例(C++,也可以用python实现):
关于,如果您想使用
self.table.item(0,1).itemText()
self.nameoftablewidget.cellWidget(row,col).currentText()
或
或
我不能直接使用项目小部件。我建议您使用item delegateQtGui.QItemDelegate
,有关更多信息,您可以在qt示例中搜索以实现此委托,我没有什么示例,希望对您有所帮助
import sys
from PyQt4 import QtGui, QtCore
class QCustomDelegate (QtGui.QItemDelegate):
def __init__(self, *args, **kwargs):
QtGui.QItemDelegate.__init__(self, *args, **kwargs)
self.listsData = ['Data 1', 'Data 2', 'Data 3']
def createEditor (self, parentQWidget, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
editorQWidget = QtGui.QComboBox(parentQWidget)
editorQWidget.clear()
for data in self.listsData:
editorQWidget.addItem(data)
return editorQWidget
else:
return QtGui.QItemDelegate.createEditor(self, parentQWidget, optionQStyleOptionViewItem, indexQModelIndex)
def setEditorData (self, editorQWidget, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
index, _ = indexQModelIndex.model().data(indexQModelIndex, QtCore.Qt.EditRole).toInt()
editorQWidget.setCurrentIndex(index)
else:
QtGui.QItemDelegate.setEditorData(self, editorQWidget, indexQModelIndex)
def setModelData (self, editorQWidget, modelQAbstractItemModel, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
index = editorQWidget.currentIndex()
modelQAbstractItemModel.setData(indexQModelIndex, index, QtCore.Qt.EditRole)
else:
QtGui.QItemDelegate.setModelData(self, editorQWidget, modelQAbstractItemModel, indexQModelIndex)
def updateEditorGeometry(self, editorQWidget, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
editorQWidget.setGeometry(optionQStyleOptionViewItem.rect)
else:
QtGui.QItemDelegate.updateEditorGeometry(self, editorQWidget, optionQStyleOptionViewItem, indexQModelIndex)
def paint (self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex):
column = indexQModelIndex.column()
if column == 0:
value, _ = indexQModelIndex.model().data(indexQModelIndex, QtCore.Qt.EditRole).toInt()
self.drawDisplay(painterQPainter, optionQStyleOptionViewItem, optionQStyleOptionViewItem.rect, QtCore.QString(self.listsData[value]));
else:
QtGui.QItemDelegate.paint(self, painterQPainter, optionQStyleOptionViewItem, indexQModelIndex)
class QCustomTableWidget (QtGui.QTableWidget):
def __init__ (self, parent = None):
super(QCustomTableWidget, self).__init__(parent)
# Setup row & column data
listsVerticalHeaderItem = ['Device 1', 'Device 2', 'Device 3', 'Device 4', 'Device 5']
self.setRowCount(len(listsVerticalHeaderItem))
for index in range(self.rowCount()):
self.setVerticalHeaderItem(index, QtGui.QTableWidgetItem(listsVerticalHeaderItem[index]))
self.setColumnCount(5)
listsHorizontalHeaderItem = ['Option 1', 'Option 2']
self.setColumnCount(len(listsHorizontalHeaderItem))
for index in range(self.columnCount()):
self.setHorizontalHeaderItem(index, QtGui.QTableWidgetItem(listsHorizontalHeaderItem[index]))
self.myQCustomDelegate = QCustomDelegate()
self.setItemDelegate(self.myQCustomDelegate)
# Test insert data
index = 2
self.setItem(0, 0, QtGui.QTableWidgetItem(str(index)))
# Test read data
index = int(self.item(0, 0).text())
print self.myQCustomDelegate.listsData[index]
if __name__ == '__main__':
myQApplication = QtGui.QApplication(sys.argv)
myQCustomTableWidget = QCustomTableWidget()
myQCustomTableWidget.show()
sys.exit(myQApplication.exec_())
QtGui.QItemDelegate
参考:
旋转框委托示例(C++,也可以用python实现):
关于,你的目标是什么?您正在尝试从特定的QComboBox提取所选字符串吗?所有的线?所有的QCOMBOX?如果“通常不知道行和列”,如何决定选择哪些元素?如果没有进一步的信息和/或一些代码摘录,您的问题太模糊,无法正确回答。好的。看这张图片:我想在不使用combobox.currentText()的情况下获取文本“abc”。我必须使用行和列信息调用它。当调用
self.table.item(行,列).currentText()
时会发生什么?我不明白为什么这不起作用AttributeError:'NoneType'对象没有属性'currentText'您的目标到底是什么?您正在尝试从特定的QComboBox提取所选字符串吗?所有的线?所有的QCOMBOX?如果“通常不知道行和列”,如何决定选择哪些元素?如果没有进一步的信息和/或一些代码摘录,您的问题太模糊,无法正确回答。好的。看这张图片:我想在不使用combobox.currentText()的情况下获取文本“abc”。我必须使用行和列信息调用它。当调用self.table.item(行,列).currentText()
时会发生什么?我不明白为什么这不起作用AttributeError:'NoneType'对象没有属性'currentText',我记不起是否需要强制转换。首先尝试调用self.table.cellWidget(0,1).currentText()。哦,天哪,它工作得非常好。我怎么会错过呢?@FlamFace self.table.cellWidget(0,1).currentText()我找到了解决问题的方法------->>>QComboBox*combo=(QComboBox*)webFilterCat->cellWidget(I,2);qDebug()currentText();对于qt c++我记不起是否需要强制转换。首先尝试调用self.table.cellWidget(0,1).currentText()。哦,天哪,它工作得非常好。我怎么会错过呢?@FlamFace self.table.cellWidget(0,1).currentText()我找到了解决问题的方法------->>>QComboBox*combo=(QComboBox*)webFilterCat->cellWidget(I,2);qDebug()currentText();对于qtc++来说,虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。虽然此代码片段可以解决问题,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
self.nameoftablewidget.cellWidget(row,col).currentText()
self.nameoftablewidget.cellWidget(row,col).currentText()