QTableWidget: удалить или расширить на всю строку активное выделение ячейки - PullRequest
1 голос
/ 11 октября 2019

В настоящее время я разрабатываю кроссплатформенное приложение (сейчас оно разрабатывается под Ubuntu 18.10 и Windows 10) с PyQT 5.13.1 на Python 3.6 / 3.7. Я использую QTableWidget, который я инициализировал следующим образом:

myTable = QTableWidget()
myTable.setSelectionBehavior(QAbstractItemView.SelectRows)
myTable.setSelectionMode(QAbstractItemView.SingleSelection)
myTable.setAlternatingRowColors(True)

В начале приложения моя таблица имеет два столбца, но пуста (без строк), и у меня есть кнопка для добавления строк одинодним. Когда я делаю это в первый раз, добавляется первая строка, и она показывает с первой ячейкой с подсветкой голубого цвета (как в Ubuntu, так и в Windows) и второй ячейкой без нее, как на этом скриншоте:

enter image description here

Если я щелкну любую из этих ячеек, выделится вся строка и отобразится синий фон, соответственно с инициализацией setSelectionBehavior. Если я нажимаю CTRL + щелчок по выбранной строке, она отменяется и возвращается с первой активной / выделенной ячейкой, а вторая - нет. У меня вопрос: есть ли способ полностью убрать это выделение (что я бы предпочел) или распространить его также на соседнюю ячейку? Я читал об одном из возможных решений - отключить фокусировку стола, но я хотел бы избежать такого решения.

Заранее всем спасибо!

1 Ответ

1 голос
/ 11 октября 2019

CurrentIndex существует, даже если индекс не выбран, и по умолчанию он подсвечивается. Таким образом, чтобы устранить это поведение, вы можете использовать делегата для устранения этого поведения:

class Delegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.state &= ~QtWidgets.QStyle.State_HasFocus
delegate = Delegate(myTable)
myTable.setItemDelegate(delegate)
...