【问题标题】:How do I gray-out a label without disabling it?如何在不禁用标签的情况下灰显标签?
【发布时间】:2017-07-28 14:13:51
【问题描述】:

我有一些标签有时会显示为灰色,具体取决于某些变量。其中一些标签在单击时会产生影响(例如更改这些因素)。无论用户使用什么主题,我都希望我的程序看起来不错,所以我不能对颜色进行硬编码。我该怎么做?

我可以想到几种解决方案,但它们都有一些令人讨厌的缺点:

  • 更改文本颜色: 听起来是最简单的解决方案,但它有点困难,因为我想支持主题/调色板。特别是如果在程序运行时更改了系统主题,那么我必须再次更新调色板。

  • 调用setDisabled() 并覆盖event这只是感觉错误,并且还有覆盖平台行为的风险。

  • 制作自定义文本小部件:当然可以,但需要大量代码重复和浪费时间,或者是相当半途而废和有限的实施。

  • 用一对setDisabled() 调用包裹paintEvent 不,只是不。另外,我不知道这是否适用于并发。

【问题讨论】:

  • 也许和QWidget.setPalette()一起玩?
  • 据我所见,这些都不是特别适合不断变化的主题。
  • 尽管有it's limitations,但操纵调色板可能是最好的方法。如果您使用color roles,调色板将跟踪当前主题。

标签: qt pyqt5


【解决方案1】:

你可以只设置这个标签的样式表,因为它是一个小部件。它适用于我,当主题因操作系统切换或其他原因而改变时,它保持不变。

label.setStyleSheet("color: gray")

样式表具有 CSS 语法。您可以用它做出精彩的事情,只需查看 reference properties 和一些 examples 即可了解一些不同的小部件。

【讨论】:

  • “当主题改变时,它保持不变”这正是我想要的。我希望它使用主题的灰色(禁用)颜色。
  • 我的意思是它只会保留字母灰色,如果你还想要边框等等,它不会改变“布局”以及按钮整体的外观。这不是你想要的吗?如果你改变主题,它的外观也会改变,但不会改变你在样式表中设置的细节。
  • 如果你没有尝试过,我会告诉你检查一下,看看它是否工作正常。但是,如果您已经告诉并尝试过,但它对您想要的不起作用,那么我认为最好的解决方案是下面那个人。 ")
【解决方案2】:

将画笔从“禁用”调色板角色复制到“活动”角色:

palette = mylabel.palette()
palette.setCurrentColorGroup(QtGui.QPalette.Disabled)
palette.setColorGroup(QtGui.QPalette.Normal, palette.windowText(),
    palette.button(), palette.light(), palette.dark(), palette.mid(),
    palette.text(), palette.brightText(), palette.base(), palette.window())
mylabel.setPalette(palette)

mylabel 现在看起来应该已禁用,但实际上并非如此。

这应该适用于任何小部件,而不仅仅是标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多