Пунктирная граница на самом деле меня тоже раздражает.Я много раз гуглю, пытаюсь решить сто раз, но с меньшим успехом.Теперь я хочу обобщить три типичных способа, может быть, вы уже знаете это, но давайте сделаем это более ясным, чтобы вы могли понять, что вам действительно нужно.
Первый QSS
Qss был заявлен как самый простой способрешить проблему.
На самом деле он работает хорошо без полномочий root, но под root он сломался.
table.setStyleSheet("QTableView:{outline: 0;}")
non root privilege
root privilege
Так что, если вашему приложению для запуска требуется привилегия root, возможно, QSS
вам не подходит.
Во-вторых, FrameSheet/FrameShape
Выглядит будет эффективно, но он будет хорошо работать без привилегий root, как описано выше.
table.setStyleSheet("QTableView:{outline: 0}")
table.setFrameShape(QtWidgets.QFrame.NoFrame)
Третье NoFocusDelegate
наследование.
Это отличный метод, он решает проблему привилегия не имеет значения
class NoFocusDelegate(QtWidgets.QStyledItemDelegate):
def paint(self, QPainter, QStyleOptionViewItem, QModelIndex):
if QStyleOptionViewItem.state & QtWidgets.QStyle.State_HasFocus:
QStyleOptionViewItem.state = QStyleOptionViewItem.state ^ QtWidgets.QStyle.State_HasFocus
super().paint(QPainter, QStyleOptionViewItem, QModelIndex)
table.setItemDelegate(NoFocusDelegate())
Этот метод поможет мне избавиться от тайны пунктирной границы, надеюсь, она вам тоже пригодится.