Python tkinter无边框小部件

Python tkinter无边框小部件,python,tkinter,Python,Tkinter,我想用tkinter尽可能地“现代”一点,可能加上ttk。现代按钮、下拉框等通常与背景完全平放,没有任何边框。我试过这样的方法 ttk.Style().configure("TCombobox", padding=4, relief="flat",borderwidth = 0,shiftrelief = 0 ) 诸如此类,但似乎没有什么能消除边界。有什么我遗漏的吗?例如,理想情况下,“按钮”看起来就像在StackOverflow中键入的这一帧顶部的按钮:只是一个具有透明背景和无边框的符号添

我想用tkinter尽可能地“现代”一点,可能加上ttk。现代按钮、下拉框等通常与背景完全平放,没有任何边框。我试过这样的方法

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

诸如此类,但似乎没有什么能消除边界。有什么我遗漏的吗?例如,理想情况下,“按钮”看起来就像在StackOverflow中键入的这一帧顶部的按钮:只是一个具有透明背景和无边框的符号添加所需按钮的非动态图像,然后检查按钮的event.x和event.y属性(鼠标按下)。使用这些坐标确定用户是否单击了您的“按钮”。

此脚本应帮助您查看“引擎盖下”发生的情况

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)
因此,对于给定的样式,它循环遍历每个子元素的布局,并递归返回每个子元素的布局信息和选项

为Combobox运行此命令时,我得到:

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上,我没有看到边框的变化,它可能不会在python绑定中实现

编辑:
还有一个库可以从其他tkinter小部件构建小部件,这意味着(经过相当多的工作)您可以重新设置这些子小部件的样式,但是我发现Pwm的combobox看起来比ttk的版本更糟糕

您是否尝试过使用tkinter的按钮而不是ttk?我没有考虑过这一点,因为tkinter没有combobox,这是我需要的。所有tkinter(非ttk)小部件是否都可以“展平”(无边框、无浮雕等)?也许我可以解决组合框的问题。你可以在同一个应用程序中同时使用tkinter和ttk小部件。一般来说,tkinter小部件比ttk小部件更容易配置(或者至少更容易配置)。谢谢,我希望有一个更“本地”的解决方案。但这至少对按钮有效。组合框等可能是另一个故事。
s.configure('TCombobox.padding', relief='flat', shiftrelief='flat')