如何在不禁用标签的情况下灰显标签?
Posted
技术标签:
【中文标题】如何在不禁用标签的情况下灰显标签?【英文标题】: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,调色板将跟踪当前主题。
【参考方案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
现在看起来应该已禁用,但实际上并非如此。
这应该适用于任何小部件,而不仅仅是标签。
【讨论】:
以上是关于如何在不禁用标签的情况下灰显标签?的主要内容,如果未能解决你的问题,请参考以下文章