ttk样式“ TNotebook.Tab”的背景和边框宽度不起作用

发布于 2021-01-29 16:53:11

我一直在与TKinter一起玩,试图创建多个选项卡窗口。

当我尝试设置样式时,TNotebook.Tab它会忽略选项backgroundborderwidth,但会承认foreground。我究竟做错了什么?

这是代码的相关部分:

COLOR_1 = 'black'
COLOR_2 = 'white'
COLOR_3 = 'red'
COLOR_4 = '#2E2E2E'
COLOR_5 = '#8A4B08'
COLOR_6 = '#DF7401'

#Notebook Style
noteStyler = ttk.Style()
noteStyler.configure("TNotebook", background=COLOR_1, borderwidth=0)
noteStyler.configure("TNotebook.Tab", background=COLOR_1, foreground=COLOR_3, lightcolor=COLOR_6, borderwidth=0)
noteStyler.configure("TFrame", background=COLOR_1, foreground=COLOR_2, borderwidth=0)

#Create Notebook and Tabs
note = ttk.Notebook(gui, style='TNotebook')
myTab = ttk.Frame(note, style='TFrame')
note.add(myTab, text = 'MyTab', compound=tk.TOP)        
note.pack(anchor=tk.W)

这是窗口外观的图像:

在此处输入图片说明

万一重要,我正在Windows 7 64位上运行python 2.7。

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    ttk主题支持的目的是使系统提供主题引擎,以绘制构成Tk小部件的各种元素,以便我们匹配当前UI的外观。对于Windows
    Vista或更高版本的“笔记本”选项卡,这意味着正在使用“
    vsapi”引擎绘制元素。该选项卡是一个元素,外观由Windows主题提供。因此,它没有提供任何修改背景的方法,就像通过选择其他Windows主题所做的那样。

    不过,你可以做的是选择从不同的TTK的主题,一个元素
    支持更改背景风格。这可能无法以其他方式紧密匹配,但是您已经与系统提供的主题有所不同。完全控制元素外观的方法是使用“图像”引擎创建一个新元素,并提供用于绘制元素的图像。一种更简单的方法是从其他主题之一借用元素。“默认”主题为指定tab元素的颜色提供了支持,因此我们可以通过重新创建元素并重新定义TNotebook布局以使用新元素来借用它。

    # Import the Notebook.tab element from the default theme
    noteStyler.element_create('Plain.Notebook.tab', "from", 'default')
    # Redefine the TNotebook Tab layout to use the new element
    noteStyler.layout("TNotebook.Tab",
        [('Plain.Notebook.tab', {'children':
            [('Notebook.padding', {'side': 'top', 'children':
                [('Notebook.focus', {'side': 'top', 'children':
                    [('Notebook.label', {'side': 'top', 'sticky': ''})],
                'sticky': 'nswe'})],
            'sticky': 'nswe'})],
        'sticky': 'nswe'})])
    noteStyler.configure("TNotebook", background=COLOR_1, borderwidth=0)
    noteStyler.configure("TNotebook.Tab", background="green", foreground=COLOR_3,
                                          lightcolor=COLOR_6, borderwidth=2)
    noteStyler.configure("TFrame", background=COLOR_1, foreground=COLOR_2, borderwidth=0)
    

    可用的选项在某种程度上取决于所使用的主题引擎,并且Windows主题比大多数主题更具限制性,因为元素的绘制已移交给第三方。极端的自定义是可能的,但确实需要重新定义窗口小部件的布局。这在python
    ttk文档中
    有所提及,但是除非您对ttk小部件的设计有所了解,否则执行该操作并不是很明显。设计意图是您不进行这种极端的自定义,而是使您的应用程序符合用户选择的平台外观。但是工具可用-
    埋得很深。这是Tcl示例的另一个链接,该示例将关闭按钮添加到选项卡



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看