如何更改自定义样式中 tkk 滚动条的宽度?
How to change the width of a tkk Scrollbar in a custom style?
在为 ttk Scrollbar
定义自定义样式时,我不知道如何更改滚动条的宽度。我注意到当我从另一个主题复制元素 TScrollbar.grip
时宽度(厚度)缩小但是当我寻找元素选项 style.element_options('My.Vertical.TScrollbar.grip')
我得到 ""
.
from tkinter import *
from tkinter import ttk
root = Tk()
style = ttk.Style()
# import elements from the 'clam' engine.
style.element_create("My.Vertical.TScrollbar.trough", "from", "clam")
style.element_create("My.Vertical.TScrollbar.thumb", "from", "clam")
style.element_create("My.Vertical.TScrollbar.grip", "from", "clam")
style.layout("My.Vertical.TScrollbar",
[('My.Vertical.TScrollbar.trough', {'children':
[('My.Vertical.TScrollbar.thumb', {'unit': '1', 'children':
[('My.Vertical.TScrollbar.grip', {'sticky': ''})],
'sticky': 'nswe'})],
'sticky': 'ns'})])
style.configure("My.Vertical.TScrollbar", gripcount=0, background="#464647",troughcolor='#252526', borderwidth=2,
bordercolor='#252526', lightcolor='#252526', darkcolor='#252526')
container = ttk.Frame(root)
canvas = Canvas(container)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview, style="My.Vertical.TScrollbar")
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(50):
ttk.Label(scrollable_frame, text="Sample scrolling label").pack()
container.pack()
canvas.pack(side="left", fill="both")
scrollbar.pack(side="right", fill="y")
root.mainloop()
在对您的代码进行一些外观更改以使其更具可读性之后,我可以通过在配置整体风格。这是在 style.configure()
调用中完成的,显示在下面带有注释 # <----- ADDED THIS.
的行中
根据我在 ttk.Scrollbar
小部件上找到的一些文档,我有了使用此选项的想法,该小部件指出虽然它 不 支持 width
选项就像 tkinter.Scrollbar
一样,您可以改为:
Configure this option using a style. You may find that configuring arrowsize
is a better choice; in some themes, increasing the width
may not increase the size of the arrowheads.
我首先尝试指定 width
,但没有任何效果。
from tkinter import *
from tkinter import ttk
root = Tk()
style = ttk.Style()
# import elements from the 'clam' engine.
style.element_create("My.Vertical.TScrollbar.trough", "from", "clam")
style.element_create("My.Vertical.TScrollbar.thumb", "from", "clam")
style.element_create("My.Vertical.TScrollbar.grip", "from", "clam")
style.layout("My.Vertical.TScrollbar",
[('My.Vertical.TScrollbar.trough',
{'children': [('My.Vertical.TScrollbar.thumb',
{'unit': '1',
'children':
[('My.Vertical.TScrollbar.grip', {'sticky': ''})],
'sticky': 'nswe'})
],
'sticky': 'ns'})])
style.configure("My.Vertical.TScrollbar", gripcount=0, background="#b0b0b0",
troughcolor='#252526', borderwidth=2, bordercolor='#252526',
lightcolor='#252526', darkcolor='#252526',
arrowsize=40) # <----- ADDED THIS.
container = ttk.Frame(root)
canvas = Canvas(container)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview,
style="My.Vertical.TScrollbar")
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind("<Configure>",
lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(50):
ttk.Label(scrollable_frame, text=f"Sample scrolling label {i}").pack()
container.pack()
canvas.pack(side="left", fill="both")
scrollbar.pack(side="right", fill="y")
root.mainloop()
结果如下所示:
在为 ttk Scrollbar
定义自定义样式时,我不知道如何更改滚动条的宽度。我注意到当我从另一个主题复制元素 TScrollbar.grip
时宽度(厚度)缩小但是当我寻找元素选项 style.element_options('My.Vertical.TScrollbar.grip')
我得到 ""
.
from tkinter import *
from tkinter import ttk
root = Tk()
style = ttk.Style()
# import elements from the 'clam' engine.
style.element_create("My.Vertical.TScrollbar.trough", "from", "clam")
style.element_create("My.Vertical.TScrollbar.thumb", "from", "clam")
style.element_create("My.Vertical.TScrollbar.grip", "from", "clam")
style.layout("My.Vertical.TScrollbar",
[('My.Vertical.TScrollbar.trough', {'children':
[('My.Vertical.TScrollbar.thumb', {'unit': '1', 'children':
[('My.Vertical.TScrollbar.grip', {'sticky': ''})],
'sticky': 'nswe'})],
'sticky': 'ns'})])
style.configure("My.Vertical.TScrollbar", gripcount=0, background="#464647",troughcolor='#252526', borderwidth=2,
bordercolor='#252526', lightcolor='#252526', darkcolor='#252526')
container = ttk.Frame(root)
canvas = Canvas(container)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview, style="My.Vertical.TScrollbar")
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(50):
ttk.Label(scrollable_frame, text="Sample scrolling label").pack()
container.pack()
canvas.pack(side="left", fill="both")
scrollbar.pack(side="right", fill="y")
root.mainloop()
在对您的代码进行一些外观更改以使其更具可读性之后,我可以通过在配置整体风格。这是在 style.configure()
调用中完成的,显示在下面带有注释 # <----- ADDED THIS.
根据我在 ttk.Scrollbar
小部件上找到的一些文档,我有了使用此选项的想法,该小部件指出虽然它 不 支持 width
选项就像 tkinter.Scrollbar
一样,您可以改为:
Configure this option using a style. You may find that configuring
arrowsize
is a better choice; in some themes, increasing thewidth
may not increase the size of the arrowheads.
我首先尝试指定 width
,但没有任何效果。
from tkinter import *
from tkinter import ttk
root = Tk()
style = ttk.Style()
# import elements from the 'clam' engine.
style.element_create("My.Vertical.TScrollbar.trough", "from", "clam")
style.element_create("My.Vertical.TScrollbar.thumb", "from", "clam")
style.element_create("My.Vertical.TScrollbar.grip", "from", "clam")
style.layout("My.Vertical.TScrollbar",
[('My.Vertical.TScrollbar.trough',
{'children': [('My.Vertical.TScrollbar.thumb',
{'unit': '1',
'children':
[('My.Vertical.TScrollbar.grip', {'sticky': ''})],
'sticky': 'nswe'})
],
'sticky': 'ns'})])
style.configure("My.Vertical.TScrollbar", gripcount=0, background="#b0b0b0",
troughcolor='#252526', borderwidth=2, bordercolor='#252526',
lightcolor='#252526', darkcolor='#252526',
arrowsize=40) # <----- ADDED THIS.
container = ttk.Frame(root)
canvas = Canvas(container)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview,
style="My.Vertical.TScrollbar")
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind("<Configure>",
lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
for i in range(50):
ttk.Label(scrollable_frame, text=f"Sample scrolling label {i}").pack()
container.pack()
canvas.pack(side="left", fill="both")
scrollbar.pack(side="right", fill="y")
root.mainloop()
结果如下所示: