2014-03-13 240 views
5

我一直在玩TKinter試圖創建一個多選項卡窗口。ttk樣式「TNotebook.Tab」背景和邊框不工作

當我試圖設計TNotebook.Tab的樣式時,它忽略了選項backgroundborderwidth,但它承認​​。我究竟做錯了什麼?

這裏是代碼的相關部分:

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) 

這裏是什麼樣的窗口看起來像一個形象:

enter image description here

在它的事項的情況下,我跑蟒蛇2.7在Windows 7 64位。

回答

5

ttk主題支持的要點是讓系統提供主題引擎來繪製構成Tk小部件的各種元素,以便我們匹配當前UI的外觀和感覺。對於Windows Vista或更高版本的Notebook Tab,這意味着使用'vsapi'引擎繪製元素。該選項卡是一個元素,它的外觀由Windows主題提供。因爲這個原因,它沒有提供任何方式來修改背景,因爲這是通過選擇替代Windows主題完成的。

但是,你可以做的是從不同的ttk主題中選擇一個元素,支持支持更改背景樣式。這在其他方面可能不盡相同,但您已經偏離了系統提供的主題。完全控制元素外觀的方法是使用「圖像」引擎創建一個新元素,並提供用於繪製元素的圖像。更簡單的方法是從其他主題中借用一個元素。 'default'主題爲指定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 docs中提到過,但除非您知道如何設計ttk小部件,否則不怎麼明顯。設計意圖是您不要進行如此極端的自定義,而是讓您的應用程序符合用戶選擇的平臺外觀和感覺。但是這些工具是可用的 - 只是埋得很深。這是Tcl示例的另一個鏈接,它添加了close buttons to the tabs