【发布时间】:2019-10-11 19:26:16
【问题描述】:
根据this post 上接受的答案,在按钮上使用.configure(highlightbackground='red') 应该在按钮周围应用颜色,但是在测试中我无法重现海报在他们的 gif 录制中展示的内容。
这是我的测试用例:(注意即使复制粘贴海报代码我也无法获得它们显示的突出显示效果)
import tkinter as tk
root = tk.Tk()
btn = tk.Button(root, text='test', bg="#000000", fg="#ffffff", highlightthickness=4, activebackground="#ffffff",
activeforeground="#000000", highlightbackground='red', highlightcolor='red')
btn.pack()
btn.focus_set()
root.mainloop()
生成的应用程序:
通过一些广泛的搜索,我在highlightbackground 上找不到太多关于同一问题的 Q/A,所以可能缺少一些东西。我还尝试将焦点设置为 this documentation 状态小部件需要焦点,但结果相同。
可能与版本或操作系统有关...
操作系统 - Windows 10 专业版
Python - 3.6.2
使用 Krrr 的帖子更新了示例。所以现在这确实有点用,但是这里的问题是它正在调整按钮的大小并且没有提供正确的突出显示颜色。
import tkinter as tk
def ResponsiveWidget(widget, *args, **kwargs):
bindings = {
'<FocusIn>': {'highlightbackground': 'red', 'highlightcolor':'red'},
'<FocusOut>': {'highlightbackground': '#d9d9d9', 'highlightcolor':'SystemButtonFace'},
'<Enter>': {'state': 'active'},
'<Leave>': {'state': 'normal'}
}
for k, v in bindings.items():
root.bind_class('Button', k, lambda e, kwarg=v: e.widget.config(**kwarg))
def update_active(event):
global previous_button
if previous_button != event.widget:
previous_button.config(default='normal')
event.widget.config(default='active')
previous_button = event.widget
root = tk.Tk()
button_list = []
previous_button = None
for i in range(5):
if i == 0:
button_list.append(tk.Button(root, text='test', bg="#000000", fg="#ffffff", highlightthickness=5,
activebackground="#ffffff", activeforeground="#000000", default='active'))
previous_button = button_list[-1]
else:
button_list.append(tk.Button(root, text='test', bg="#000000", fg="#ffffff", highlightthickness=5,
activebackground="#ffffff", activeforeground="#000000", default='normal'))
button_list[-1].pack(padx=5, pady=5)
button_list[-1].bind('<ButtonRelease-1>', update_active)
root.mainloop()
结果:
期望:
【问题讨论】:
-
您的代码在 OSX 上工作:我看到红色突出显示颜色。
-
@BryanOakley Hum。不能在我的工作电脑上工作。回家后我会在 3.7 上测试。
-
就其价值而言,它也不适用于我的 Windows 10 Python 3.7.4。我认为你不会有太多的运气。似乎与操作系统相关。
-
@Krrr 感谢您的意见。在这一点上,这听起来像是一个操作系统问题。
-
我将添加一个观察 - 按钮大小对我来说似乎是可疑的。在您链接到的答案中,按钮之间有间距,但是当我运行代码时,按钮会扩展至最大,没有间隙。与您当前的示例相同。