Pyqt5 QTreeWidget CurrentItemChanged отправка целых чисел в качестве предыдущего элемента

У меня есть элемент QTreeWidget и сигнал CurrentItemChanged, связанный с методом, который обновляет графический интерфейс на основе поиска в БД.

В документации CurrentItemChanged говорится, что она передаст QTreeWidgetItems в качестве аргументов методу. Сначала текущий элемент, затем элемент, который был выбран ранее.

Я вижу QTreeWidgetItem, за которым следует целое число, вероятно, столбец выбранного в данный момент элемента, вместо этого передается сообщение. Такое поведение, похоже, не является частью чьей-либо документации по Pyqt5.

Прежде чем я сам сохраню ссылки на предыдущий пункт, что-то мне не хватает? Код удручающе прост:

self.TreeWidget.currentItemChanged.connect(self.update) # signal connect

def update(self, old, new):
    # do stuff with old and new, both as as QTreeWidgetItems

1 ответ

Решение

Этот сигнал испускается при изменении текущего элемента. Текущий элемент указывается текущим, и он заменяет предыдущий текущий элемент.

Попытайся:

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.vlayout = QtWidgets.QVBoxLayout()

        # tree widget item
        tree_widget_item = QtWidgets.QTreeWidgetItem(['Item 1'])
        tree_widget_item.addChild(QtWidgets.QTreeWidgetItem(['Sub item 1']))  
        tree_widget_item.addChild(QtWidgets.QTreeWidgetItem(['Sub item 2']))

        # tree widget
        tree_widget = QtWidgets.QTreeWidget(self)
        tree_widget.addTopLevelItem(tree_widget_item)
        self.vlayout.addWidget(tree_widget)

        tree_widget.currentItemChanged.connect(self.current_item_changed)

    @QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem, QtWidgets.QTreeWidgetItem)
    def current_item_changed(self, current, previous):
        print('\ncurrent: {}, \nprevious: {}'.format(current, previous))


application = QtWidgets.QApplication(sys.argv)
window = Window()
window.setWindowTitle('Tree widget')
window.resize(250, 180)
window.show()
sys.exit(application.exec_())

Другие вопросы по тегам