2
我有一个QTableWidget表,其中每行的第一列是QComboBoxex,而这又是表的QTableWidgetItems,其余是正常的文本输入单元格。PyQt:如何从QCombobox这是一个QTableWidgetItem信号
请问如何从任何QCombobox中获取“currentIndexChanged(int)”信号,它会告诉我comboboxex从它们发出的行号?
下不起作用:
def insert_row_cb(self, table, cb_col):
rows = table.rowCount()
table.insertRow(rows)
self.set_row_items_cb(table, cb_col)
self.resize_rows(table)
return table
def set_row_items_cb(self, table, cb_col):
cb = QtGui.QComboBox()
signalMapper = QtCore.QSignalMapper()
rows = table.rowCount()
cols = table.columnCount()
for col in range(cols):
if col == cb_col:
table.setCellWidget(rows - 1, cb_col, cb)
signalMapper.setMapping(cb, table.item(0, 0))
cb.currentIndexChanged.connect(signalMapper.map)
signalMapper.mapped.connect(self.cb_index_changed)
else:
table.setItem(rows - 1, col, QtGui.QTableWidgetItem(''))
return table
def cb_index_changed(self, index):
print(index)
谢谢。
*编辑 - 我知道了! *
我的DataTable类:
from PyQt4 import QtGui, QtCore
class DataTable(QtCore.QObject):
cb_index_changed_signal = QtCore.pyqtSignal(QtGui.QWidget)
def __init__(self, parent = None):
QtCore.QObject.__init__(self)
self.signalMapper = QtCore.QSignalMapper()
self.signalMapper.mapped[QtGui.QWidget].connect(self.on_signalMapper_mapped)
def insert_row_cb(self, table, cb_col):
rows = table.rowCount()
table.insertRow(rows)
self.set_row_items_cb(table, cb_col)
self.resize_rows(table)
return table
def set_row_items_cb(self, table, cb_col):
cb = QtGui.QComboBox()
cb.currentIndexChanged.connect(self.signalMapper.map)
rows = table.rowCount()
cols = table.columnCount()
for col in range(cols):
if col == cb_col:
table.setCellWidget(rows - 1, cb_col, cb)
cb.row = rows - 1
cb.column = cb_col
self.signalMapper.setMapping(cb, cb)
else:
table.setItem(rows - 1, col, QtGui.QTableWidgetItem(''))
return table
def on_signalMapper_mapped(self, cb):
self.cb_index_changed_signal.emit(cb)
在这里,在另一个类我创建一个表:
from scripts.data_table import DataTable
self.data_table = DataTable(self)
self.consumption_table = self.data_table.insert_row_cb(self.consumption_table, 0)
self.data_table.cb_index_changed_signal.connect(self.cb_index_changed_signal)
def cb_index_changed_signal(self, cb):
print ("row: "+str(cb.row)+" column: "+str(cb.column)+" text: "+cb.currentText())
非常感谢你。这工作!然而,它只能在自己的类中工作,在我的情况下,我有一个DataTable类,它具有创建表,插入/删除行等所需的所有属性。因此,我可以打印关于组合框的所有信息。但是,如何将该信息返回给调用DataTable属性的另一个类?我在那里连接什么信号/插槽?见上面的代码。谢谢。 – linuxoid
我懂了!谢谢。 – linuxoid