Сделать QTableWidgetItem не редактируемым, но все еще способным выбирать части строки

#pyqt #pyqt5

#pyqt #pyqt5

Вопрос:

У меня есть QTableWidget с данными, по которым я хотел бы, чтобы пользователь мог дважды щелкнуть и скопировать определенную часть текста. Единственное, что я хочу отключить, это возможность пользователя изменять этот текст, что означает, что установка флага ~Qt.ItemIsEditable слишком ограничительна. Как я могу добиться этого в PyQt5?

Комментарии:

1. qtreewidget или QTableWidget?

Ответ №1:

Примечание: Это решение работает для всех типов классов, которые наследуются от QAbstractItemView, таких как QTableWidget или QTreeWidget.

Возможное решение — использовать изменение редактора, чтобы он был доступен только для чтения через делегата.

 class StyledItemDelegate(QStyledItemDelegate):
    def createEditor(self, *args):
        editor = super().createEditor(*args)
        if isinstance(editor, QLineEdit):
            editor.setReadOnly(True)
        return editor
 
 delegate = StyledItemDelegate(view)
view.setItemDelegate(delegate)