按下“返回”键后,qTableWidget中的项目将不会更新

时间:2019-04-11 09:45:18

标签: pyqt4 cell updates qtablewidget

我有一个已经装满的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?

1 个答案:

答案 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的帮助!