2017-05-05 153 views
0

我想用tkinter儘可能地使用ttk來獲得「現代」外觀。現代按鈕,下拉框等往往完全平坦的背景,沒有任何邊界。我嘗試過的東西,如tkinter小部件無邊界

ttk.Style().configure("TCombobox", padding=4, relief="flat",borderwidth = 
0,shiftrelief = 0) 

之類的,但似乎沒有刪除邊界。有什麼我失蹤?理想情況下,例如,「按鈕」看起來就像在StackOverflow上輸入的那個幀的頂部的按鈕一樣:只是具有透明背景和無邊框的符號

+0

你有沒有嘗試過使用tkinter而不是ttk的按鈕? –

+0

我沒有考慮過,因爲tkinter沒有組合框,我需要(很多)。所有tkinter(而不是ttk)小工具是否可以「展平」(沒有邊界,沒有浮雕等)?也許我可以解決組合框問題。 – user3486991

+0

您可以在同一個應用程序中同時使用tkinter和ttk小部件。一般來說,tkinter小部件比ttk小部件更容易配置(或者至少更容易配置)。 –

回答

0

添加按鈕的非動態圖像你想要的,然後檢查Button-1單擊(鼠標按下)的event.x和event.y屬性。使用這些座標來確定用戶是否點擊了你的「按鈕」。

+0

謝謝,我希望有一個更「原生」的解決方案。但至少可以用於按鈕。 Comboboxes等可能是另一回事。 – user3486991

0

這個腳本會幫助你明白是怎麼回事

import tkinter as tk 
from tkinter import ttk 

root = tk.Tk() 
c = ttk.Combobox(root) 
c.grid() 

style = 'TCombobox' 

s = ttk.Style() 
elements = s.layout(style) 

def get_element_details(elem, _dict, depth=1): 
    print('%selement: %s' % (''.join(['\t' for s in range(depth)]), elem)) 
    for key in _dict: 
     if key != 'children': 
      print('%s%s: %s' % (''.join(['\t' for s in range(depth+1)]), key, _dict[key])) 
    print('%soption: %s' % (''.join(['\t' for s in range(depth+1)]), s.element_options(elem))) 
    if 'children' in _dict: 
     for child, child_dict in _dict['children']: 
      get_element_details(child, child_dict, depth+1) 

print('element: %s' % style) 
print('option: %s' % str(s.element_options(style))) 
for elem, elem_dict in elements: 
    get_element_details(elem, elem_dict) 

所以對於給定的風格它遍歷佈局爲每個子元素的「引擎蓋下」,並返回佈局信息和選項每個遞歸地。

運行此對組合框,當我得到:

element: TCombobox 
option:() 
    element: Combobox.field 
     sticky: nswe 
     option:() 
     element: Combobox.downarrow 
      side: right 
      sticky: ns 
      option:() 
     element: Combobox.padding 
      expand: 1 
      sticky: nswe 
      option: ('-padding', '-relief', '-shiftrelief') 
      element: Combobox.focus 
       expand: 1 
       sticky: nswe 
       option: ('-focusfill',) 
       element: Combobox.textarea 
        sticky: nswe 
        option: ('-font', '-width') 

然而,當我嘗試:

s.configure('Combobox.padding', relief='flat', shiftrelief='flat') 
在Windows

s.configure('TCombobox.padding', relief='flat', shiftrelief='flat') 

我沒有看到一個變化邊界,它可能不會在python綁定中實現。

編輯: 也有一個圖書館Pwm是構建小部件從其他Tkinter的部件,這意味着(有工作的公平位),您可以重新風格的子窗口小部件,但我覺得從PWM組合框比TTK的看起來更糟版本