2017-05-05 101 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的看起来更糟版本