我希望tkinter尽可能“现代”,可能还有ttk。现代按钮,下拉盒等通常在背景下完全平坦,没有任何边框。我尝试过像
这样的事情ttk.Style().configure("TCombobox", padding=4, relief="flat",borderwidth =
0,shiftrelief = 0 )
等,但似乎没有删除边框。有什么我想念的吗?理想情况下,例如,“按钮”看起来就像StackOverflow上的一个类型的这个框架顶部的按钮:只是一个透明背景且没有边框的符号
答案 0 :(得分:0)
添加所需按钮的非动态图像,然后检查Button-1单击的event.x和event.y属性(鼠标按下)。使用这些坐标来确定用户是否点击了"按钮"。
答案 1 :(得分: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)
因此,对于给定的样式,它遍历每个子元素的布局,并以递归方式返回布局信息和选项。
为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')
或
s.configure('TCombobox.padding', relief='flat', shiftrelief='flat')
在Windows上我没有看到边框发生变化,可能无法在python绑定中实现。
编辑: 还有一个库Pwm可以从其他tkinter小部件构建小部件,这意味着(通过相当多的工作)你可以重新设置这些子小部件的样式,但我发现Pwm的组合框看起来比ttk更糟糕。版本