【问题标题】:How to make border of QLabel look like border of other widgets like QTreeWidget?如何使 QLabel 的边框看起来像 QTreeWidget 等其他小部件的边框?
【发布时间】:2017-06-14 21:32:01
【问题描述】:

我注意到 QTreeWidget 和 QLabel 的边框样式不同 - 即使我尝试调整样式表。当然,我可以更改两者的样式表,但理想情况下我想保留 QTreeWidget 的边框样式。如何让 QLabel 的边框看起来像 QTreeWidget 的边框?


MCVE sn-p:

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; border: 1px inset grey; 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_())

没有样式表:


MCVE sn-p 生成窗口的屏幕截图:


我希望窗口的外观:

【问题讨论】:

  • 您可以更好地解释或显示您想要的图像。
  • 我没有注意到区别,您可以用箭头或类似的东西指向。
  • 我认为QFrame properties 是您正在寻找的。特别是frameShapeframeShadow

标签: python qt pyqt pyqt4 pyqt5


【解决方案1】:

您可能已经找到了答案,但以防万一……

以下内容应该为您提供您想要的...

label = QLabel(self)
label.setFrameShape(QFrame.Panel)
label.setFrameShadow(QFrame.Sunken)
label.setLineWidth(3)

我刚刚硬连线了线宽。请注意,“border: 1px”说明符必须从样式表中移除,否则将优先使用指定的线宽。完整的代码是……

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; inset grey; min-height: 200px;")
        label.setFrameShape(QFrame.Panel)
        label.setFrameShadow(QFrame.Sunken)
        label.setLineWidth(3)
        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_())

【讨论】:

  • 这不适用于所有样式。 tree-widget 和 label 的边框可能看起来不一样,即使两者都应用了完全相同的框架设置。有些样式只是为某些小部件绘制不同的边框。 Plastique 样式和 Windows 样式(OP 似乎正在使用)似乎就是这种情况。相比之下,默认的 Fusion 样式绘制它们的方式相同,Cleanlooks 和 GTK2 样式也是如此。 (我使用 Qt Designer 中的预览模式对此进行了测试)。
  • @ekhumoro 你说的是真的,但是......它也是在Qt 中实现的样式的本质——某些功能/更改适用于某些样式,但不适用于其他样式。就个人而言,我通常不考虑样式的东西——用户应该选择一种样式,我不能干涉它:-)
猜你喜欢
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多