取消调色板的背景

Posted

技术标签:

【中文标题】取消调色板的背景【英文标题】:unsetting the background to palette 【发布时间】:2016-05-31 20:23:17 【问题描述】:

我在使用带有默认调色板颜色和自定义颜色的 Tcl/Tk 时遇到问题。

我有一个文本窗格,我想在特定情况下设置背景颜色(例如,指示缺少用户输入),然后回退到默认背景颜色(一旦特定情况得到解决)。

到目前为止,我一直在为小部件使用 -background 选项。 例如

$ wish
# ALERT: turn the background to pink
. configure -background pink
# SNAFU: turn the background back to white
. configure -background white

但是,我刚刚发现了tk_setPalette,它允许我设置我的应用程序的全局调色板。 不幸的是,这两者似乎并没有很好地结合在一起:一旦我明确设置了小部件的背景颜色,似乎就没有办法取消设置它(并回退到当前的默认颜色由调色板设置):

$ wish
# cheesy color-scheme
tk_setPalette brown
# ALERT: turn the background to pink
. configure -background pink
# SNAFU: turn the background back to "normal"
. configure -background white
# hmpf, no not "white"; the current palette is 'brown'
. configure -background brown

一个解决方案(我想避免)是将调色板存储在一个变量中,并使用它来明确设置背景:

$ wish
# cheesy color-scheme
set mypalette brown
tk_setPalette $mypalette
# ALERT: turn the background to pink
. configure -background pink
# SNAFU: turn the background back to "normal"
. configure -background $mypalette

但是,这有很多缺点: - 我需要跟踪我的应用程序中发生的任何调色板更改(这可能很难做到,因为我的应用程序有一个可用于皮肤的“插件”系统) - 这仅适用于background,但设置调色板会改变更多的颜色,而不仅仅是背景。

特别是。第二个缺点是一个真正的问题。 目前我的一个小部件是文本entry,它使用white 作为默认背景,pink 作为警报颜色和default 文本颜色。 每当我将配色方案更改为除white 之外的任何内容时,默认文本颜色将变为white,从而使文本不可见(因为背景也是white,而不是default)。

所以问题是:

如何将颜色恢复为palette 提供的默认值?

如何从palette 查询给定元素的默认颜色?

【问题讨论】:

【参考方案1】:

我认为不再支持 tk_setPalette。它被使用 与 pre-ttk 小部件结合使用,不适用于所有 主题。

查询默认颜色:

获取 ttk 小部件的背景颜色:

 set bg [ttk::style lookup TFrame -background]

其中 TFrame 是小部件的“类”。

要获取 pre-ttk 小部件的背景颜色:

 set bg [. cget -background]

此方法几乎适用于任何 pre-ttk 小部件。

至于跟踪颜色变化,我会保存任何调色板基色, background、fieldbackground、foreground 和其他你可能需要的颜色 主题插件已加载。

您的另一个选择是保存单个小部件的当前前景/背景等。 在你修改它以显示错误之前。

 set oldbg [.myentry cget -background]
 set oldfg [.myentry cget -foreground]
 ... change colors, display error condition...
 ... when error is resolved ...
 .myentry configure -background $oldbg
 .myentry configure -foreground $oldfg

参考:ttk::styleframetk_setPalette

【讨论】:

以上是关于取消调色板的背景的主要内容,如果未能解决你的问题,请参考以下文章

在 QT Creator 的调色板编辑器中编辑小部件的背景颜色

Qt 按钮调色板

Qt 设置对话框背景(使用调色板,设置它的画刷,画刷可以是图片)

QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色背景色文字颜色以及基色)

LCD 调色板

RecyclerView 中的 Android 调色板