使用后ttk.Style().theme_create('name', settings={})
可以看到该主题的设置吗?
我问的原因是当我创建一个新主题并添加ttk.Notebook(root)
对于我的代码,选项卡有圆角,这是我不想要的。
这是一个例子:
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.title("Tab Example")
root.geometry('270x270')
background = '#ffffff'
background_dark = '#f2f2f2'
style = ttk.Style()
style.theme_create('white', settings={
'TLabel': {'configure': {'background': background}},
'TFrame': {'configure': {'background': background}},
'TNotebook': {
'configure': {'background': background_dark, 'tabmargins': [0, 7, 2, 0], 'padding': [7, 2]}},
'TNotebook.Tab': {
'configure': {'background': background_dark, 'padding': [7, 2], 'focuscolor': 'clear'},
'map': {'background': [('selected', background)]}}})
style.theme_use('white')
tab = ttk.Notebook(root)
tab1 = ttk.Frame(tab)
tab2 = ttk.Frame(tab)
tab.add(tab1, text='Tab 1')
tab.add(tab2, text='Tab 2')
tab.pack(expand=1, fill="both")
ttk.Label(tab1, text="example").pack(padx=36, pady=36)
ttk.Label(tab2, text="example 2").pack(padx=36, pady=36)
root.mainloop()
如果您删除style.theme_create()
/ style.theme_use()
那么选项卡不再有圆角,因此程序必须默认添加该样式。
如果没有办法查看主题设置(似乎无法在docs https://docs.python.org/3/library/tkinter.ttk.html#ttk-styling)是否有我可以使用的可能设置列表?专门针对选项卡边框的东西?
就这一点而言,有一个类似的问题,有 Tkinter/ttk 风格参考吗? https://stackoverflow.com/questions/24592132/is-there-a-tkinter-ttk-style-reference但是,提供的答案中的第一个链接没有列出以下边框角或边框样式的任何内容ttk::笔记本 http://tmml.sourceforge.net/doc/tk/ttk_notebook.html而第二个链接没有响应。
EDIT
扩展Atlas435的答案,
style_name = ttk.Notebook(None).winfo_class()
# print(style_name) -> 'TNotebook'
print(style.layout('TNotebook')) # -> [('Notebook.client', {'sticky': 'nswe'})]
print(style.element_options('Notebook.client')) # -> ('borderwidth', 'background')
除了'background'
,我无法看到上面使用的自定义设置的名称'TNotebook'
:
style.theme_create('white', settings={
'TNotebook': {'configure':
{'background': background_dark, 'tabmargins': [0, 7, 2, 0], 'padding': [7, 2]}}})
如果我这样做,我会更接近我正在寻找的东西,但仍然不完全是:
print(style.layout('Tab')) # -> [('Notebook.tab', {'sticky': 'nswe', 'children': [('Notebook.padding', {'sticky': 'nswe', 'children': [('Notebook.label', {'sticky': 'nswe'})]})]})]
print(style.element_options('Notebook.tab')) # -> ('borderwidth', 'background')
骑自行车穿过另一个element_options
(Notebook.padding
and Notebook.label
)也不提供我正在寻找的值:(
EDIT 2
一些样式选项没有在任何地方列出,包括Tcl/Tk 文档 https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_notebook.htm#M38.
一个例子是'focuscolor'
for 'TNotebook.Tab'
当选项卡处于焦点时,它会更改选项卡周围虚线的颜色。
另一个例子是当使用ttk.Style().theme_use('default')
or .theme_use('classic')
,笔记本中的选项卡具有圆角边缘。如果你使用.theme_use('clam')
or .theme_use('vista')
,笔记本中的选项卡没有圆角边缘。
我无法在任何文档中找到该样式选项,并且无法通过程序打印它(见上文)Edit部分)。
现在我接受当前的最佳答案(Atlas435)来帮助我得出这个结论。
对于其他遇到此问题的人来说,一个临时解决方案可能是设置'clam'
or 'vista'
as a parent
使用时ttk.Style().theme_create()
或者创建一个看起来像选项卡的图片,并具有您想要和使用的样式tab.add(tab1, image=img)
FINAL
提供完整列表,请查看 Atlas 435answer https://stackoverflow.com/questions/65461962/tkinter-ttk-see-custom-theme-settings/65464537#65464537