这个脚本会帮助你明白是怎么回事
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小部件更容易配置(或者至少更容易配置)。 –