【问题标题】:Tkinter widget and/or system default coloursTkinter 小部件和/或系统默认颜色
【发布时间】:2021-04-22 11:40:15
【问题描述】:

我正在尝试实现一个 tkinter 小部件,它具有与 Listbox 相似(最小)的功能,但允许多行条目。
基本上,它继承自Frame,管理自己的滚动行为,每个项目都是该框架内的Message

为了获得合理的外观和感觉,当点击一个项目时,我希望它像用户期望的那样突出显示。

有没有为此类任务使用系统/小部件默认颜色的好方法?
我发现this page 向我表明,系统颜色取决于平台。那是对的吗?或者有没有办法独立引用“正常高亮颜色​​”操作系统?

或者我应该为此手动实现颜色,这在我正在开发的系统上可能看起来不错,但很可能在其他系统上看起来很难看或至少不是有机的?

【问题讨论】:

  • 你当然可以为所有平台创建颜色,然后检查你在哪个平台上(我不知道具体怎么做,但谷歌可能有答案)。你也不能使用Text 小部件(它支持多行条目)?
  • 我希望避免手动操作系统检查,所以我想我会先尝试下面的答案。如果我觉得受到Message 的限制,我可能会使用Text,但我的用例甚至可能不需要。不过谢谢你的提示,到目前为止我还没有考虑过。

标签: python tkinter


【解决方案1】:

最简单的解决方案是创建一个临时列表框,然后让 tkinter 告诉你它正在使用什么颜色。

listbox = tk.Listbox(root)
colors = {attr: listbox.cget(attr) for attr in (
    "background", "foreground", "disabledforeground",
    "highlightbackground", "highlightcolor",
    "selectbackground", "selectforeground"
)}

以上将生成列表框使用的颜色选项字典。在我的 OSX 盒子上,它返回如下内容:

{
    'background': 'systemTextBackgroundColor',
    'disabledforeground': '#a3a3a3',
    'foreground': 'systemTextColor',
    'highlightbackground': 'systemWindowBackgroundColor',
    'highlightcolor': 'Black',
    'selectbackground': 'systemSelectedTextBackgroundColor',
    'selectforeground': 'systemSelectedTextColor'
}

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2020-06-23
    • 2015-03-17
    相关资源
    最近更新 更多