Элемент в qTableWidget не будет обновляться после нажатия клавиши «возврат» - PullRequest
0 голосов
/ 11 апреля 2019

У меня уже есть заполненный 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 Ответ

1 голос
/ 12 апреля 2019

Хорошо, я понимаю вашу точку зрения. Как вы предположили, я использовал существующий сигнал (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))

Я добавил тест на значение столбца, чтобы применить этот сигнал только ко всем строкам первого столбца ...

Спасибо за помощь, эхуморо!

...