這個腳本會幫助你明白是怎麼回事
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的看起來更糟版本
你有沒有嘗試過使用tkinter而不是ttk的按鈕? –
我沒有考慮過,因爲tkinter沒有組合框,我需要(很多)。所有tkinter(而不是ttk)小工具是否可以「展平」(沒有邊界,沒有浮雕等)?也許我可以解決組合框問題。 – user3486991
您可以在同一個應用程序中同時使用tkinter和ttk小部件。一般來說,tkinter小部件比ttk小部件更容易配置(或者至少更容易配置)。 –