取消调色板的背景
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 设置对话框背景(使用调色板,设置它的画刷,画刷可以是图片)