1

我正在尝试使用QFrame. 最终,我没能像Qt 文档
中演示的那样创建一个空框架(参见页面中间的表格)。创建本身没有问题,但显然样式无法应用,因此小部件不可见。 QFrame

使用 .setFrameStyle() 设置样式

这是一个人为的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QFrame

if __name__ == '__main__':

    app = QApplication(sys.argv)

    window = QWidget()
    window.resize(250, 150)
    window.move(300, 300)
    window.setWindowTitle('Sample')

    window.frame = QFrame(window)
    window.frame.setLineWidth(5)
    window.frame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised)
    # window.frame.setStyleSheet("background-color: rgb(200, 255, 255);"
    #                            "border-width: 1;"
    #                            "border-radius: 3;"
    #                            "border-style: solid;"
    #                            "border-color: rgb(10, 10, 10)"
    #                            )

    window.frame.move(20, 20)
    window.show()

    sys.exit(app.exec_())

如果我取消注释.setStyleSheet()呼叫,我会得到一种想要的效果,但我对我无法实现相同目标的事实感到困惑.setFrameStyle()

使用 .setStyleSheet() 设置样式

我正在使用 Python 3.7、PyQt 5.11.3

4

2 回答 2

3

如果它不是您默认样式的一部分(我想它是“windows”样式),这不是错误,在我的情况下,我使用“fusion”样式并且我没有观察到您指示的行为。

正如@ekhumoro指出的那样,StylePanel 是一个Panel,即绘制一个矩形面板,但尊重当前的QStyle。如果要绘制矩形面板,则必须使用 QFrame.Panel 选项而不是 QFrame.StylePanel。

window.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
于 2019-08-12T12:00:26.497 回答
0
window.frame.setStyleSheet("QFrame {background-color: rgb(200, 255, 255);"
                                "border-width: 1;"
                                "border-radius: 3;"
                                "border-style: solid;"
                                "border-color: rgb(10, 10, 10)}"
                                )
于 2020-06-09T16:30:46.777 回答