Ste*_*anL 9 python styles tkinter scrollbar ttk
我想知道你是否可以帮助我解决ttk中的样式选项问题.我已经设法将大多数基本ttk小部件改为我喜欢的风格.我只是坚持改变滚动条的样式.我搜索了几个小时寻找答案,遗憾的是无济于事.
以下是使用滚动条样式选项的示例代码:
import tkinter as tk
from tkinter import ttk
class Gui:
def __init__(self,mainframe):
#set the style
style = ttk.Style()
style.configure('Horizontal.TScrollbar',background = "blue" )
#Create a mainframe
self.mainframe = mainframe
self.mainframe.title("example")
#creating scrollbar frame
scrl_attr_frame = ttk.Frame(self.mainframe)
scrl_attr_frame.grid(column=0,row=5,sticky="ns")
scrl_attr_frame.rowconfigure(0, weight=1)
attr_canvas = tk.Canvas(scrl_attr_frame)
h_scroll = ttk.Scrollbar(scrl_attr_frame,orient="horizontal", command=attr_canvas.xview)
attr_canvas.configure(xscrollcommand=h_scroll.set)
attr_canvas.grid(column=0,row=0,sticky="ns")
h_scroll.grid(column=0, row=1,sticky="we")
attr_frame = ttk.Frame(attr_canvas)
attr_frame.grid(column=0,row=0,sticky="ns")
attr_canvas.create_window((0,0),window=attr_frame, anchor='nw')
attr_frame.bind("<Configure>",lambda event, canvas=attr_canvas : canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200,takefocus=False,highlightthickness=0))#attribute_frame.winfo_height()/20,highlightthickness=0))
#setup treeview widget
tree_columns = ("c1", "c2", "c3")
self.tree = ttk.Treeview(attr_frame,columns=tree_columns, show="headings",takefocus=False)
self.tree.grid(column=0, row=0, sticky='nsew')
for head in tree_columns:
self.tree.heading(head,text=head,anchor="w")
root = tk.Tk()
myapp = Gui(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我也尝试过几种组合,包括:
style.configure('TScrollbar',background='blue')
#and
style.configure('CustomScroll.Horizontal.TScrollbar',background='blue')
#in combination with
h_scroll = ttk.Scrollbar(scrl_attr_frame,orient="horizontal", command=attr_canvas.xview)
h_scroll['style'] = "CustomScroll.Horizontal.TScrollbar"
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助!
如果您使用clam主题,则更容易:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
style = ttk.Style()
style.theme_use('clam')
# list the options of the style
# (Argument should be an element of TScrollbar, eg. "thumb", "trough", ...)
print(style.element_options("Horizontal.TScrollbar.thumb"))
# configure the style
style.configure("Horizontal.TScrollbar", gripcount=0,
background="Green", darkcolor="DarkGreen", lightcolor="LightGreen",
troughcolor="gray", bordercolor="blue", arrowcolor="white")
hs = ttk.Scrollbar(root, orient="horizontal")
hs.place(x=5, y=5, width=150)
hs.set(0.2,0.3)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
看起来您只想更改Windows主题下水平滚动条的槽.ttk小部件由样式引擎提供的一组元素构成,并使用声明的布局进行组合.在Windows下,样式引擎是Windows Visual Styles API,这意味着程序员无法控制用于绘制大多数常见元素的颜色或图像.按钮背景,滚动条槽和按钮以及拇指甚至滚动条拇指内绘制的手柄都由Windows提供.
这是可能采取的这种控制应用程序的定制,但在让你的应用程序不再看给定的平台上标准的成本.为此,您必须提供自己的UI元素并定义新的窗口小部件布局.最终,这可以转变为定义自己的主题.ttk库中的tcl脚本提供了很好的示例,甚至还有一些完整的(如果旧的)主题使用位图来声明原始版本的ttk中基于图像的主题元素,这被称为"tile".
在这个具有自定义彩色背景的Windows水平滚动条的具体示例中,我们需要重新定义布局以使用Tk绘制元素中的滚动条槽."默认"主题中使用的元素可以复制并使用样式配置参数定义,然后由Tk本身绘制,而不是传递给第三方引擎.下面的代码生成一个这样的滚动条,它使用vsapi样式引擎提供的标准按钮和拇指,但替换了槽.这个导入的槽了解troughcolor样式配置选项,因此我们可以定义一个现在使用的颜色.使用此样式的所有滚动条将使用相同的颜色,因为窗口小部件本身将不接受troughcolor选项.即:除非为每种新颜色定义新样式,否则不能有一个滚动条为蓝色而另一个滚动条为红色.

from tkinter import *
from tkinter.ttk import *
def main():
app = Tk()
style = Style()
# import the 'trough' element from the 'default' engine.
style.element_create("My.Horizontal.Scrollbar.trough", "from", "default")
# Redefine the horizontal scrollbar layout to use the custom trough.
# This one is appropriate for the 'vista' theme.
style.layout("My.Horizontal.TScrollbar",
[('My.Horizontal.Scrollbar.trough', {'children':
[('Horizontal.Scrollbar.leftarrow', {'side': 'left', 'sticky': ''}),
('Horizontal.Scrollbar.rightarrow', {'side': 'right', 'sticky': ''}),
('Horizontal.Scrollbar.thumb', {'unit': '1', 'children':
[('Horizontal.Scrollbar.grip', {'sticky': ''})],
'sticky': 'nswe'})],
'sticky': 'we'})])
# Copy original style configuration and add our new custom configuration option.
style.configure("My.Horizontal.TScrollbar", *style.configure("Horizontal.TScrollbar"))
style.configure("My.Horizontal.TScrollbar", troughcolor="red")
# Create and show a widget using the custom style
hs = Scrollbar(app, orient="horizontal", style="My.Horizontal.TScrollbar")
hs.place(x=5, y=5, width=150)
hs.set(0.2,0.3)
app.mainloop()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
spa*_*her -1
这在 Windows 上的 tkinter 中似乎不可能。下面的答案是这样说的: ScrolledText Scrollbar Color (Python Tkinter)
滚动条文档:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/scrollbar.html 支持的样式字段: http: //infohost.nmt.edu/tcc/help/pubs/tkinter/web/ ttk-Scrollbar.html
我尝试在 Windows 计算机上传递“背景”和“槽色”,但没有成功。我还尝试将样式应用到一般滚动条: style.configure('TScrollbar', background="blue") 我的解决方案都不起作用。
另一篇论坛帖子也同意您不能在此处设置滚动条背景的样式: http: //www.gossamer-threads.com/lists/python/python/822292
| 归档时间: |
|
| 查看次数: |
6422 次 |
| 最近记录: |