我有一个已填充的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?
好的,我明白了你的意思。正如你所建议的,我使用了一个现有的信号(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!