【问题标题】:define a new color in Tcl/Tk (or redefine an existing one)在 Tcl/Tk 中定义新颜色(或重新定义现有颜色)
【发布时间】:2021-11-24 14:28:11
【问题描述】:

我想做的是在为画布元素着色时使用我自己的自定义颜色名称,这样我就可以创建自己的调色板/配色方案/...用于canvas 中的数据显示。 我想实现类似于我们可以使用 hightlightColors/... 对于常规小部件但具有不同类别的功能。

现在,我可以像这样使用named colors

canvas .canvas
pack .canvas
.canvas create rectangle 10 10 100 100 -fill blue

但是,有时我想使用mauve,但它还不存在:

% .canvas create rectangle 10 10 100 100 -fill mauve
unknown color name "mauve"

在这里使用 tk_setPalette 对我没有帮助:

% tk_setPalette mauve #ae7181
must specify a background color

当然我可以只使用变量:

% set mauve #ae7181
% .canvas create rectangle 10 10 100 100 -fill $mauve

...但是在我的用例中很快就会变得丑陋(Tcl/Tk 代码是由另一个应用程序生成的 - 我们真的不想详细了解何时逃避 $ 何时不逃避...)

那么:是否可以在 Tcl/Tk 中定义我自己的颜色?

当我们这样做时:是否可以重新定义现有的符号颜色? (例如把red变成#ff5632

应该在 Linux/Windows/macOS 上工作(最好使用 Tcl/Tk>=8.4)

【问题讨论】:

    标签: canvas colors tcl tk color-scheme


    【解决方案1】:

    命名颜色集由 Xserver(如果您使用一个)或在编译时定义为固定列表(在其他平台上)。已经有人提议像我们对字体一样使用自定义命名颜色,但这些提议都没有完成任何实现工作;至少在一种情况下,有人认为做这个提案就足以让其他人为他实施一些东西。 (世界不是这样运作的!)

    如果您不需要运行时重新配置命名颜色,最简单的做法是将您想要的颜色(可能以#ABCDEF 形式)放入全局变量中,然后使用该变量:

    # Defining a colour
    set IMPORTANT_COLOR "#FF9090"
    
    # Using that colour
    button -text "Important!" -background $::IMPORTANT_COLOR
    

    允许更多运行时重新配置的另一种方法是使用自定义 Ttk 主题,但编程主题既非常棘手(它很微妙),而且在我从未掌握的 Tk 方面列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 2013-02-17
      • 2020-11-02
      • 1970-01-01
      • 2017-03-15
      • 2016-10-26
      相关资源
      最近更新 更多