如何删除选中复选框后出现的Python3 tkinter ttk.CheckButton虚线?

时间:2016-10-21 02:08:56

标签: python tkinter ttk

有没有办法删除在使用“默认”主题时单击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

1 个答案:

答案 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)的背景。这具有删除虚线边框的效果。

然而,虚线边框是有原因的。它向用户显示哪个控件具有焦点。当窗口上只有一个控件时,它看起来有点奇怪。但是当你有几个时,它允许用户使用键盘比使用键盘更容易浏览你的应用程序。