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

问题描述 投票:0回答:2

有什么方法可以删除使用“默认”主题时单击 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
python tkinter ttk
2个回答
5
投票

也许我错了,但是,似乎没有“冲刺”选项。但是,仍然有一些选择。

您可以将“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)的背景相同。这具有删除虚线边框的效果。

但是,虚线边框的存在是有原因的。它向用户显示哪个控件具有焦点。当窗口上只有一个控件时,看起来有点奇怪。但是,当您有多个键盘时,用户可以使用键盘比不使用键盘更轻松地浏览您的应用程序。


0
投票

我在修改配置之前保存了配置样式,对我来说,这很有效

    style = ttk.Style()
    global current_style
    current_style = style.theme_use()
    style.theme_use("default")
    style.configure(
        "Treeview",
        background="#4C639F",
        foreground="white",
        fieldbackground="#4C639F",
        font=("Arial", 9),
        rowheight=40,
        border_color="#4C639F",
        padding=0,
    )

之后:

style = ttk.Style()
style.theme_use(current_style)
© www.soinside.com 2019 - 2024. All rights reserved.