我有一个已经装满的qTableWidget,我想更改一个单元格的内容。 因此,我双击该单元格,先前的文本突出显示,输入新的文本,然后按“返回”键。 我捕获到“按键”信号,连接的插槽包含一个打印修改后的单元格内容的功能。
# Override qTableWidget class to catch event
class MyQTableWidget(PyQt4.QtGui.QTableWidget):
def __init__(self, parent=None):
super(MyQTableWidget, self).__init__(parent)
def keyPressEvent(self, event):
super(MyQTableWidget, self).keyPressEvent(event)
key = event.key()
if key == PyQt4.QtCore.Qt.Key_Return or key == PyQt4.QtCore.Qt.Key_Enter:
self.emit(PyQt4.QtCore.SIGNAL("returnPressed"))
...
# Connect the "keypress" signal
self.tableWidget_casesList.connect(self.tableWidget_casesList, PyQt4.QtCore.SIGNAL("returnPressed"), self.renameCase)
...
# Print the modified text of the cell
def renameCase(self):
# Get the new text entered by user
newCaseName = str(self.tableWidget_casesList.item(self.tableWidget_casesList.currentRow(), 1).text())
print("New case's name : {0:s}".format(newCaseName))
Pb:打印的文本是原始文本,而不是修改后的文本。我必须再次按下“返回”键才能打印新文本… 在执行插槽功能之前,是否需要执行特定的操作来强制更新qTableWidget?
答案 0 :(得分:1)
好的,我明白你的意思了。
如您所建议,我使用了一个现有信号(cellChanged
),它的工作与我期望的一样。
self.tableWidget_casesList.connect(self.tableWidget_casesList, PyQt4.QtCore.SIGNAL("cellChanged(int,int)"), self.renameCase)
...
def renameCase(self, row, col):
if col == 1:
# Get the new text entered by user
newCaseName = str(self.tableWidget_casesList.item(row, 1).text())
print("New case's name : {0:s}".format(newCaseName))
我已经在列值上添加了一个测试,以便仅将此信号应用于第一列的所有行...
感谢您对ekhumoro的帮助!