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