如何在不禁用标签的情况下灰显标签?

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 现在看起来应该已禁用,但实际上并非如此。

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

【讨论】:

以上是关于如何在不禁用标签的情况下灰显标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止超链接链接

如何启用/禁用选择标签并通过淘汰赛发布(即使禁用)

如何在不丢失选择颜色的情况下禁用多选的拖动选择?

如何使用javascript包含struts html标签?

如何在不使用标签的情况下制作滑动屏幕?

如何在不重新加载表格的情况下调整表格单元格内的标签大小?