2016-10-21 19 views
2

有沒有什麼辦法可以在使用「默認」主題時單擊ttk.Checkbutton對象的文本時刪除出現的虛線輪廓?使用如何刪除選中複選框後出現的Python3 tkinter 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 
+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和背景顏色等於主窗口(主)的背景。這有刪除虛線邊框的效果。

但是,虛線邊框是有原因的。它向用戶顯示哪個控件具有焦點。當窗戶上只有一個控件時,它看起來有點奇怪。但是,當你有幾個它允許用戶使用鍵盤瀏覽你的應用程序比它更容易。

+0

嗨安德魯, 有沒有什麼辦法可以讓我看到一個工作版本,因爲我無法讓你的建議工作。你提供的第二部分代碼似乎將短劃線的顏色從黑色改爲白色,但我不確定如何讓它匹配標籤元素的背景顏色。你也可以解釋一下「。」參數是指? –

+0

我已經設法讓我的項目具有我想要的風格,但是我不完全確定我理解它是如何工作的。我試圖將這些概念應用到上面的小例子中,但不成功。鑑於我能夠利用安德魯的答案來獲得我期待的結果,我將其標記爲答案,但是我真的希望有人爲我們這些未來將與之抗爭的「我」提供更具體的例子。謝謝安德魯指導我走正確的道路,找到一個可行的解決方案。 –

+2

我已編輯帖子,以包含基於您自己的代碼的示例。我希望這有幫助。 @krazynhazy –