【问题标题】:tkinter seems to have changed its default style for showing selected texttkinter 似乎已经改变了显示选定文本的默认样式
【发布时间】:2021-07-28 04:17:20
【问题描述】:

我刚刚重建了我的 linux 桌面,现在是 Mint 20.1 Mate。我有 python 3.8.5 和 Tk 8.6。不幸的是,我不确定我上周使用的是什么版本的 Tk,我敢肯定它已经是 8.6 很长时间了,但是我使用的是 Mint 20.1 xcfe 和 python 3.8.5。 Tk 是通过 apt install python3-tk 安装的

使用 Tk GUI 的程序,以及像 Entry 和 Text 这样的文本小部件,在直到上周的过去十年中,仅使用默认设置来显示具有明显对比突出显示的选定文本。我不确定它是否与 Mint 使用的相同,但它并没有引起任何意外。

现在我已经重建,选择突出显示或多或少是不可见的。如果我仔细观察(非常浅的灰色),我可以看出它已被突出显示,但现在使用起来很痛苦。我可以通过将背景更改为绿色或橙色等对比色来使其更明显,这在美学上不太令人满意。

如何再次更改 Tk 的默认设置?我怎样才能知道它们应该是什么?它有用户可访问的默认值吗?

查看文档,我发现除了文本选择突出显示之外,还有一些选项可以更改大多数内容。

这可能是在告诉我我应该继续学习 ttk 和样式。但这有点需要学习,还有很多程序需要更改。

【问题讨论】:

  • 有一个选项可以更改应为的选定文本:selectforegroundselectbackground 相同,甚至还有 selectborderwidth(至少对于 Entry 小部件)
  • @Matiiss 有没有办法改变所有小部件的默认值?
  • 当然可以选择直接转到 tkinter 源代码并手动更改它们(不建议),否则我不知道(除了可能是操作系统版本更改)
  • @Matiiss:有一些方法可以在不修改源代码的情况下更改默认值。
  • @Matiiss 我找到了这个,它似乎可以工作root.tk_setPalette(background='#40E0D0', foreground='black', activeBackground='black', activeForeground=mycolor2, etc ...)

标签: tkinter textselection


【解决方案1】:

tkinter 使用它所谓的选项数据库作为其默认值。不同的平台会以不同的方式定义这个数据库。可能是您的操作系统更改了它,或者您的特定桌面环境导致了它的更改。

文本选择由selectbackgroundselectforeground 选项控制。对于每个选项,选项数据库中都有一个相应的值。每个小部件类也有值,因此您可以为文本小部件设置一个值,为条目小部件设置不同的值。

对于selectbackground,选项数据库中的名称是selectBackground。您可以使用option_set 方法更改数据库中的值。设置此值后创建的任何小部件都将使用新值。

例如,如果您想将条目选择背景设置为粉红色,您可以执行以下操作:

import tkinter as tk

root = tk.Tk()
root.option_add("*Entry.selectBackground", "pink")

在该代码行之后创建的任何 Entry 小部件都将使用粉红色作为选择背景的默认值。要为所有小部件更改它,您只需删除 Entry.

root.option_add("*selectBackground", "pink")

选项数据库有点神秘。它源于 tk 仅在基于 X11 的系统上工作时指定小部件选项的方式。它非常强大,但不是特别直观。

据我所知,最详细的在线文档是标题为Options and Tk - A Beginner's Guide 的文档。它是从 tcl/tk 而不是 python/tkinter 的角度编写的,但概念是相同的。 python 文档中的Tkinter Life Preserver 可以帮助翻译成python。

【讨论】:

    【解决方案2】:

    经过一番搜索,我发现了这个命令

    root.tk_setPalette(background='#40E0D0', foreground='black', etc, ...
    

    它会更改应用程序中的所有现有小部件,并为新小部件设置默认值。根据this page可以设置以下选项...

    前景/背景
    activeForeground / activeBackground
    选择前景/选择背景
    highlightColor / highlightBackground
    禁用前景
    插入背景
    槽色
    选择颜色

    其中大多数都达到了我的预期。但是 insertBackground 似乎只控制插入光标的颜色,而 selectColor 是 CheckButtons 的背景。 highlightColor 和 highlightBackground 分别控制有焦点和没有焦点的小部件的轮廓。

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2020-03-09
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2013-10-17
      • 2012-10-10
      • 1970-01-01
      相关资源
      最近更新 更多