как установить цвет рамки Qframe? - PullRequest
0 голосов
/ 27 июня 2018

Я хочу установить цвет рамки, предоставляемой QFrame в pyside2.

Ниже в документе приводятся подробные сведения о том, как создать рамку с другим стилем, например, блоком, панелью, линией и т. Д. *

https://doc -snapshots.qt.io / qtforpython / PySide2 / QtWidgets / QFrame.html # детального описания

У меня вопрос, как мне установить цвет этой рамки? Я пытался установить цвет, используя таблицы стилей "background-color" и "border", но не получил желаемый результат.

Ниже мой код.

class HLine(QFrame):
    def __init__(self, parent=None, color="black"):
        super(HLine, self).__init__(parent)
        self.setFrameShape(QFrame.HLine)
        self.setFrameShadow(QFrame.Plain)
        self.setLineWidth(0)
        self.setMidLineWidth(3)
        self.setContentsMargins(0, 0, 0, 0)
        self.setStyleSheet("border:1px solid %s" % color)

    def setColor(self, color):
        self.setStyleSheet("background-color: %s" % color)
        pass

Нет таблицы стилей.

enter image description here

Вывод с таблицей стилей границы

enter image description here

Вне таблицы стилей цвета фона

enter image description here

оба являются таблицей стилей, дающей нежелательный вывод.

Как установить цвет без изменения внешнего вида рамки?

1 Ответ

0 голосов
/ 27 июня 2018

Вместо использования таблицы стилей Qt вы можете использовать QPalette:

import sys
from PySide2.QtCore import Qt
from PySide2.QtGui import QColor, QPalette
from PySide2.QtWidgets import QApplication, QFrame, QWidget, QVBoxLayout


class HLine(QFrame):
    def __init__(self, parent=None, color=QColor("black")):
        super(HLine, self).__init__(parent)
        self.setFrameShape(QFrame.HLine)
        self.setFrameShadow(QFrame.Plain)
        self.setLineWidth(0)
        self.setMidLineWidth(3)
        self.setContentsMargins(0, 0, 0, 0)
        self.setColor(color)

    def setColor(self, color):
        pal = self.palette()
        pal.setColor(QPalette.WindowText, color)
        self.setPalette(pal)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(400, 400)
    lay = QVBoxLayout(w)
    lay.addWidget(HLine())

    for color in [QColor("red"), QColor(0, 255, 0), QColor(Qt.blue)]:
        h = HLine()
        h.setColor(color)
        lay.addWidget(h)

    w.show()
    sys.exit(app.exec_())

enter image description here

...