我想将一种颜色固定到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()
答案 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'))