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

问题描述 投票:-1回答:1

我有一个已填充的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?

pyqt4 cell updates qtablewidget
1个回答
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!

© www.soinside.com 2019 - 2024. All rights reserved.