【问题标题】:QFrame border is not displayedQFrame边框不显示
【发布时间】:2019-08-12 11:14:19
【问题描述】:

我正在尝试使用QFrame 为一组小部件创建一个边框。
最终,我没能像Qt documentation 中演示的那样创建一个空框架(参见页面中间的表格)。 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

【问题讨论】:

  • 试试:app.setStyle("fusion")
  • 这很神奇;实际上,小部件的外观完全由应用程序样式控制。谢谢,app.setStyle() 有效。另外我可以澄清一下,是否可以不使用样式表设置小部件边框角半径?我只想在定义样式时保持一致(使用方法调用或样式表)。
  • 你可以通过 QProxyStyle 做到这一点。

标签: python python-3.x pyqt pyqt5 qframe


【解决方案1】:

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

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

window.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)

【讨论】:

  • 我觉得可能是 gtk 风格。问题可能是QFrame.StyledPanel 的使用。使用QFrame.Panel 应该可以修复它(无论如何,它似乎在 qt 设计器中工作)。
  • @ekhumoro 也许,不幸的是我无法验证它,因为我不在 Windows 中
  • StyledPanel 的文档说:“绘制一个矩形面板,其外观取决于当前的 GUI 样式”。如果您永远无法覆盖当前样式,那么拥有所有其他框架选项会很奇怪。
  • @ekhumoro 是的,我明白你在说什么,但似乎某些样式(例如默认带有 OP GUI 的样式)没有实现它。
  • 对不起,我不明白你:不执行什么?像 gtk 这样的一些样式默认不画边框,但这并不意味着你不能重新打开它们。
【解决方案2】:
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)}"
                                )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2014-01-15
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2021-09-15
    相关资源
    最近更新 更多