有没有办法删除在使用“默认”主题时单击ttk.Checkbutton对象文本时出现的虚线轮廓?
例子。)
from tkinter import *
from tkinter import ttk
master = Tk()
style = ttk.Style() # print(self.style.theme_names())
style.theme_use('default')
var = IntVar()
c = ttk.Checkbutton(master, text="Click My Text", variable=var)
c.pack()
mainloop()
如果没有,是否有任何方法可以更改在Windows上运行时使用的标准主题的背景按钮颜色? (不幸的是,这个项目我不能考虑使用任何其他GUI包)
OS: Windows 10
Python: 3.5.1
Frustration level: one bajillion
答案 0 :(得分:3)
也许我错了,但似乎没有"冲出来"选项。但是,仍有一些选择。
你可以设置' takefocus'选项为False。这将停止显示虚线轮廓,但也会删除控件之间标签的功能。
c = ttk.Checkbutton(master, text="Click My Text", variable=var, takefocus=False)
另一种选择是更改短划线的颜色以匹配背景:
style.configure('TCheckbutton', focuscolor=style.configure(".")["background"])
这种作品,但你需要使用高光颜色,所以它总是不可见。
修改强>
虽然敲了一个小例子以帮助其中一条评论,但我发现了一种稍微简单的方法。使用cget()我们可以获得属性的值。这可以用来代替摆弄风格,更容易阅读和理解。
使用cget,上面的例子变为:
style.configure('TCheckbutton', focuscolor=master.cget("background"))
这只是将焦点颜色设置为等于主对象(窗口)的背景颜色。
根据要求,这是一个基于问题原始代码的完整示例:
from tkinter import *
from tkinter import ttk
master = Tk()
style = ttk.Style()
style.theme_use('default')
style.configure('TCheckbutton', focuscolor=master.cget("background"))
style.configure('TCheckbutton', activebackground=master.cget("background"))
style.configure('TCheckbutton', background=master.cget("background"))
var = IntVar()
c = ttk.Checkbutton(master, text="Click My Text", variable=var)
c.pack()
mainloop()
这里我们将focuscolor,activebackground和背景颜色设置为等于主窗口(master)的背景。这具有删除虚线边框的效果。
然而,虚线边框是有原因的。它向用户显示哪个控件具有焦点。当窗口上只有一个控件时,它看起来有点奇怪。但是当你有几个时,它允许用户使用键盘比使用键盘更容易浏览你的应用程序。