如何将边框的颜色固定为色标中的一种颜色?

时间:2020-08-11 19:21:11

标签: python tkinter

我想将一种颜色固定到tkmacosx库的色标窗口小部件的边框上:当窗口打开时,与色标交互后,颜色为蓝色,边框的颜色也会改变。如何停止并将其固定为一种颜色?

from tkinter import *
from tkmacosx import ColorVar, Colorscale

win = Tk()
win.geometry('300x200')
var = ColorVar()

entry = Entry(win, fg=var)
entry.pack()

colorscale = Colorscale(win, variable=var, mousewheel=1)
colorscale.pack()
mainloop()

1 个答案:

答案 0 :(得分:1)

您可以删除或隐藏或更改其边界线的颜色,因为它只是Canvas的一项,并且可以通过其标记名"borderline"进行访问。当用户与Colorscale进行交互并且调整窗口小部件的大小时,边界线会更改其颜色。

要删除边框,您只需执行以下操作

colorscale.after(100, lambda: colorscale.delete('borderline'))

要隐藏,您需要做的就是像下面这样将边界线的状态更改为"hidden"

colorscale.after(100, lambda: Canvas.itemconfig(
    colorscale, 'borderline', state='hidden'))

要首先更改边界线的颜色,您需要通过添加Canvas.itemconfig(self, 'borderline', outline='#8E91F3')然后用"borderline" dtag Canvas.dtag(self, 'borderline')标签来更改边界线的颜色。

使用以下_set_size函数修复边界线的任何颜色。

def _set_size(self, evt=None):
    """Internal function."""
    if evt.width == self._size[0] and evt.height == self._size[1]:
        return
    self._size = (evt.width, evt.height)
    self._create_items('create', safe_create=True, avoid=('borderline'))
    self._create_items('check')   # Check and creates a borderline
    Canvas.itemconfig(self, 'borderline', outline='#8E91F3') # Changes the color 
    Canvas.dtag(self, 'borderline')  # Removes "borderline" tag from all matching items.

现在,您可以在每次调整窗口小部件大小时调用以上任何一个函数。但是,我建议您宁愿修改Colorscale的内部函数_set_size,而不是每次<Configure>序列触发时都调用上述任何函数。因此,我创建了一个自定义类MyColorscale,该类不会显示边界线。

class MyColorscale(Colorscale):
    def _set_size(self, evt=None):
        """Internal function."""
        if evt.width == self._size[0] and evt.height == self._size[1]:
            return
        self._size = (evt.width, evt.height)
        self._create_items('create', safe_create=True, avoid=('borderline'))