我正在试图弄清楚如何设置Python中的ttk按钮(ttk.Button) 在Linux上,现在我专注于边界。所有内置主题( alt , clam ,经典和默认)似乎都使用< em> Button.border 元素,但它们列出了不同的选项,并不一定支持某些列出的选项。
alt 列出 -background , -bordercolor , -default , -borderwidth 和 -relief 。但是, -bordercolor 将被忽略。
clam 列出 -bordercolor , -lightcolor , -darkcolor , -relief 和 -borderwidth 。但是, -borderwidth 将被忽略。
经典列出 -background , -borderwidth , -relief 和 - 默认
默认列出 -background , -borderwidth 和 -relief 。
为什么 Button.border 元素只有 clam 支持 -bordercolor , -lightcolor ,和 -darkcolor ,只有其他人支持 -borderwidth ?难道不是所有主题都支持所有这些选项吗?
我并不擅长阅读Tcl,但我在ttk主题文件中看不到任何内容(altTheme.tcl,clamTheme.tcl,classicTheme.tcl,defaults.tcl )表示 Button.border 元素是自定义的或任何对它的引用。 TButton 样式只有一些 configure 和 map 调用。
这是我用来查看上述结果的代码:
import pprint
import tkinter as tk
import tkinter.ttk as ttk
def theme_changed(theme):
style.theme_use(theme)
print(theme)
pprint.pprint(style.layout('TButton'))
pprint.pprint(style.element_options('Button.border'))
style.configure(
'Custom.TButton',
background='#FFFFFF', # White
bordercolor='#00FF00', # Green
lightcolor='#FF0000', # Red
darkcolor='#0000FF', # Blue
borderwidth=4,
foreground='#00FFFF', # Cyan
)
root = tk.Tk()
style = ttk.Style()
combo = ttk.Combobox(root, values=sorted(style.theme_names()), state='readonly')
combo.set(style.theme_use())
combo.bind('<<ComboboxSelected>>', lambda _e: theme_changed(combo.get()))
combo.pack()
theme_changed(style.theme_use())
button = ttk.Button(root, text="Normal Button")
button.pack()
button = ttk.Button(root, style="Custom.TButton", text="Custom Button")
button.pack()
root.mainloop()