Python Tkinter滑块自定义

Python Tkinter滑块自定义,python,python-3.x,tkinter,tkinter-scale,Python,Python 3.x,Tkinter,Tkinter Scale,我是tkinter的新手,我想创建一个类似于下图的滑块: 但我不知道这是否可能,所以我的问题是:这可能吗,有人给我提供了快速教程或其他什么吗?这可以通过自定义ttk主题来实现。其想法是使用图像作为标尺的槽一个小的灰色正方形和滑块一个圆圈。可以使用以下方法从这些图像创建主题元素: style.element_create('custom.Scale.trough', 'image', img_trough) style.element_create('custom.Scale.slider',

我是tkinter的新手,我想创建一个类似于下图的滑块:


但我不知道这是否可能,所以我的问题是:这可能吗,有人给我提供了快速教程或其他什么吗?

这可以通过自定义ttk主题来实现。其想法是使用图像作为标尺的槽一个小的灰色正方形和滑块一个圆圈。可以使用以下方法从这些图像创建主题元素:

style.element_create('custom.Scale.trough', 'image', img_trough)
style.element_create('custom.Scale.slider', 'image', img_slider)
然后,必须使用创建比例的布局

style.layout('custom.Vertical.TScale',
             [('custom.Scale.trough', {'sticky': 'ns'}),
              ('custom.Scale.slider',
               {'side': 'top', 'sticky': '',
                'children': [('custom.Vertical.Scale.label', {'sticky': ''})]
                })])
以便它使用创建的元素。我添加了一个标签来显示值,但它只能通过样式访问,因此我们必须为每个创建的比例使用唯一的样式名称,例如“custom.Vertical.TScale”。然后我们可以用

style.configure('<scale name>.custom.Vertical.TScale', text=<value>)
主要缺点是,如果单击标签,幻灯片不会发生反应

注意:要使水平比例具有相同的比例,请创建布局:

style.layout('custom.Horizontal.TScale',
             [('custom.Scale.trough', {'sticky': 'ew'}),
              ('custom.Scale.slider',
               {'side': 'left', 'sticky': '',
                'children': [('custom.Horizontal.Scale.label', {'sticky': ''})]
                })])

在创建自定义比例时,只需使用orient=horizontal,就像常规比例一样。

如果您从图像创建自己的ttk主题,这可能是可能的。我不知道有什么教程,但你们可以在应用程序中看一看。_uinit__;方法,我从图像行102-141创建自定义滚动条。你们能在这里帮助我吗?我还有一个问题,我能否将灰色背景颜色更改为0e0e?当我将选项bg='0e0e0e'添加到自定义比例时,它会给我一个错误..CustomScale是一个ttk.scale,因此您需要使用样式来更改背景:style.configure'custom.Vertical.TScale',background='0e0e0e',如果您想更改滑块或槽的颜色,你需要改变图像。我们怎样才能得到槽的水平线?在哪里可以找到这些数据?@Thalis使用任何图像编辑器,例如paint、gimp、。。。要创建直线,您甚至可以创建一个正方形,以便可以将其与水平和垂直样式一起使用。然后将其保存到.PNG,并使用img_槽=tk.PhotoImagefile=..将其加载到tkinter中。。。。我在这里使用了图像数据,这样人们就可以直接运行代码,但你不必这样做。@j_4321在我发表评论后,我意识到我也可以使用png文件。我只是对你提供的数据感到困惑。谢谢你的澄清!。
style.layout('custom.Horizontal.TScale',
             [('custom.Scale.trough', {'sticky': 'ew'}),
              ('custom.Scale.slider',
               {'side': 'left', 'sticky': '',
                'children': [('custom.Horizontal.Scale.label', {'sticky': ''})]
                })])