Win7 上的 Tkinter highlightcolor 选项

Posted

技术标签:

【中文标题】Win7 上的 Tkinter highlightcolor 选项【英文标题】:Tkinter highlightcolor options on Win7 【发布时间】:2016-05-14 16:32:53 【问题描述】:

我正在构建一个 Tkinter GUI (Python 2.7) 并在 Win7 机器上运行它。我想做的一件事是让按钮和复选框等控件在突出显示时呈现不同的颜色(因为突出显示标记本身有点微弱,尤其是在默认的灰色背景下)。但是,将 highlightcolor 设置为不同的颜色(例如 'cyan')对 GUI 没有任何影响;无论是否有焦点,控件都保持灰色。作为交叉检查,我尝试将所有 highlightblah 选项设置为不同的值,但它仍然显示为灰色,厚度也没有明显变化。

这只是 Tkinter 在 Win7 上的限制吗?它只是不响应这些选项吗?

【问题讨论】:

不确定这是否会回答您的问题,希望对您有所帮助。 ***.com/questions/14264819/… 不,那只是在谈论背景颜色(bg)。我正在寻找与获得/失去焦点(即突出显示)相关的颜色变化。 在 Linux 上试过这个。看来highlightcolor 旨在更改小部件的框架/环境,而不是背景本身,因此那里的文档具有高度误导性。 【参考方案1】:

这里是一个普通按钮的例子:

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

class HighlightButton(tk.Button):
    def __init__(self, master, *args, **kwargs):
        tk.Button.__init__(self, master, *args, **kwargs)
        # keep a record of the original background colour
        self._bg = self['bg']
        # bind to focus events
        self.bind('<FocusIn>', self._on_focus)
        self.bind('<FocusOut>', self._on_lose_focus)

    def _on_focus(self, event):
        self.configure(bg=self['highlightcolor'])

    def _on_lose_focus(self, event):
        self.configure(bg=self._bg)

root = tk.Tk()
hb = HighlightButton(root, text='Highlight Button', highlightcolor='cyan')
hb.pack()
t = tk.Text(root)
t.pack()
root.mainloop()

所以这会添加绑定以对获得或失去键盘焦点做出反应,您可以将其扩展到例如也改变文本的颜色。将其用于检查按钮应该相对简单。

【讨论】:

我刚刚意识到这并不是你所要求的,但我认为这是我能做的最好的,但它不仅仅是 python 2.7,Windows 10 上的 3.7 也有同样的问题。跨度> 【参考方案2】:

这是你想要的一个简单的例子

from Tkinter import *
from time import sleep
from random import choice


class TestColor():

    def __init__(self):
        self.root = Tk()
        self.button = Button(self.root, text = "buggton", command = self.ChangeColor, bg = "green", fg = "Black", activebackground = "Red", highlightbackground="Black")
        self.button.grid(row=0, column=0)
        self.RanDomiZeColor = ["blue", "black", "white", "yellow"]
        self.root.mainloop()

    def ChangeColor(self):
        self.button = Button(self.root, text = "buggton", command = self.ChangeColor, bg = choice(self.RanDomiZeColor), fg = choice(self.RanDomiZeColor), activebackground = choice(self.RanDomiZeColor), highlightbackground = choice(self.RanDomiZeColor))
        self.button.grid(row=0, column=0)

try: TestColor()
except Exception as why: print why; sleep(10)

它在 Windows 10 上 100% 运行。所以在 Windows 7 上试试吧 我将颜色设置为随机,所以你可以用你的“颜色”定义每一个,以了解发生了什么,它也是highlightbackground而不是highlightcolor

【讨论】:

这不是一个真正有用的例子......它每次点击都会实例化一个新按钮,新按钮直接位于旧按钮的顶部并覆盖它/它们,并且将随机颜色更改应用于每个颜色选项而不仅仅是我关心的突出显示颜色选项,总体上存在太多“噪音”。而且,话虽如此,它并没有完成我最初在 Win7 上所要求的:当我打开或关闭按钮时,按钮仍然没有发生颜色变化。

以上是关于Win7 上的 Tkinter highlightcolor 选项的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 上的 UIControl.State.Highlighted 图像仅在第一次触摸事件后有效

无法更改像素本上的 tkinter 字体

Windows 上的 Python Tkinter? [复制]

画布上的 tkinter 菜单栏

删除 Tkinter 窗口上的 TK 图标

Tkinter 小部件上的垂直和水平滚动条