Как получить ширину границы виджета в PyQt5?

#python #pyqt #pyqt5 #border #stylesheet

#python #pyqt #pyqt5 #граница #таблица стилей

Вопрос:

У меня есть QTableView, который переопределяет sizeHint() и возвращает QSize путем сложения высот / ширин всех столбцов / строк высоты / ширины заголовков.

Однако результат все еще немного слишком мал и показывает полосы прокрутки, если я тоже…

  1. Задайте для таблицы стилей значение border-width: 0;
  2. Добавьте 2 пикселя к sizeHint

Я хочу границы, так что остается # 2. Но теперь мне нужно иметь возможность заставить пользователя изменить стиль, который может изменить размер границы, поэтому вместо простого добавления 2px мне нужно получить border-width*2 . Как я могу это сделать?

Следующий код возвращает prints 3 , что неверно, но это единственная ссылка на границы, которую я смог найти в документах QStyle

 style = self.style()
print(style.pixelMetric(style.PM_MenuPanelWidth))
  

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

1. Может быть небольшой запас (обычно 1-2 пикселя), который можно вычислить с помощью table.width() - table.viewport().width() . Также есть table.frameWidth() , но я не знаю, как это взаимодействует с таблицами стилей — и в любом случае, размер виджета не включает его рамку.

2. 2 * frameWidth() сработал, спасибо! В итоге все равно получается неправильный размер при использовании темы qdarkstyle, но я уверен, что это не связано с шириной границы, и это работает для встроенных тем.

3. Вы проверили поля? Я почти уверен, что margin и frame-width будут иметь схожие значения (но это вполне может зависеть от стиля).