样式ttk按钮边框

时间:2016-02-11 06:22:27

标签: python linux tkinter tcl ttk

我正在试图弄清楚如何设置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 borders across themes

为什么 Button.border 元素只有 clam 支持 -bordercolor -lightcolor ,和 -darkcolor ,只有其他人支持 -borderwidth ?难道不是所有主题都支持所有这些选项吗?

我并不擅长阅读Tcl,但我在ttk主题文件中看不到任何内容(altTheme.tclclamTheme.tclclassicTheme.tcldefaults.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()

0 个答案:

没有答案