Как я могу применить стиль (таблицу) одного QtWidget (например, QTreeWidget) к другому виджету (например, QLabel)? - PullRequest
0 голосов
/ 16 декабря 2018

Я запустил приведенный ниже фрагмент MCVE на двух разных системах, в результате чего появились окна, изображенные на скриншотах.Как вы можете видеть, их стили границ отличаются.Я не против этого.Стили границ могут различаться в двух системах.Однако для одной системы я бы хотел, чтобы стиль границ обоих QtWidget был одинаковым.Стиль границы QLabel пока не установлен.

Как установить стиль границы QLabel на тот же стиль границы, что и QTreeWidget?


Фрагмент MCVE

import sys
from PyQt5.QtWidgets import *

class widget(QWidget):
    def __init__(self):
        super().__init__()
        treewidget = QTreeWidget(self)
        label = QLabel(self)
        label.setStyleSheet("background-color: white; min-height: 200px;")
        grid = QGridLayout()
        grid.setSpacing(10)
        grid.addWidget(treewidget, 1, 0)
        grid.addWidget(label, 2, 0)
        self.setLayout(grid)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    f = widget()
    sys.exit(app.exec_())

Снимок экрана из двух разных систем

screenshot

1 Ответ

0 голосов
/ 16 декабря 2018

Ваш общий вопрос невозможно решить по следующим причинам:

  • Свойства виджета не доступны другим виджетам.

  • Значения определенных свойств имеют значения по умолчанию и в значительной степени зависят от решения разработчиков Qt, например, от края QLabel, то есть от края можно изменить, но значение по умолчанию не может быть прочитано.

  • Не все визуальные элементы могут быть изменены с помощью таблицы стилей Qt, в действительности она очень ограничена, часто лучше создать настроенный QStyle.

Но вашконкретная проблема может быть решена, в этом случае мы устанавливаем границу none.

from PyQt5 import QtWidgets

QSS = '''
QTreeWidget{ 
    border: None 
}
QLabel{
    background-color: white; 
    min-height: 200px;
}
'''

class widget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        treewidget = QtWidgets.QTreeWidget()
        label = QtWidgets.QLabel()

        grid = QtWidgets.QGridLayout(self)
        grid.setSpacing(10)
        grid.addWidget(treewidget, 1, 0)
        grid.addWidget(label, 2, 0)
        self.show()

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(QSS)
    f = widget()
    sys.exit(app.exec_())

enter image description here

...