Tkinter:更改选项卡颜色会导致无关对话框中的按钮边框消失

0 投票
1 回答
529 浏览
提问于 2025-04-18 07:51

在Python 3.4和Tkinter中,下面这段代码用来改变我的Notebook中的标签颜色,但结果却导致我打开的文件对话框里的按钮等的边框消失了。

style = Style();
style.theme_create("tabcolor", settings={"TNotebook.Tab": {"configure": {"background": self.tbgcolor, "foreground": self.tfgcolor }, "map": {"background": [("selected", self.atbgcolor)], "foreground": [("selected", self.atfgcolor)]}}});
style.theme_use("tabcolor");

这是为什么呢?我该怎么解决这个问题?

这里有一张显示问题的对话框的图片。注意,按钮上没有边框:

在这里输入图片描述

补充:这也导致在文本控件中的复选框即使被选中也显示为未选中。

1 个回答

0

我终于找到了解决这个问题的方法。

首先,解决方案是配置样式和其他设置,而不是创建一个主题。如果你创建一个主题,容易出错。我觉得这个主题是把笔记本的样式应用到了所有的控件上,或者只是添加了指定的样式,而把其他的留空(没有使用默认值)。老实说,我不太确定原因,但我知道解决办法。用这个代替创建和使用主题:

(self.d 是一个字典,里面包含了颜色等信息,不需要在你的代码中包含。)

Style().configure("TNotebook", background=self.d["tcolor"]); #This line isn't technically part of the answer, but people seeing this will likely want to know this, too (it changes the color of the tab bar portion without tabs on it).
Style().map("TNotebook.Tab", background=[("selected", self.d["atbgcolor"])], foreground=[("selected", self.d["atfgcolor"])]);
Style().configure("TNotebook.Tab", background=self.d["tbgcolor"], foreground=self.d["tfgcolor"]);

基本上,这段代码和主题里的代码是一样的,但它不会影响所有东西(只影响你想要的部分)。我通过查看Python的帮助文档找到了这个答案。我看到了map方法(Style使用这个方法而不是字典),然后尝试进行转换。结果成功了(这次)。

撰写回答