首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ttk式ttk标尺布局中的变化元素

ttk式ttk标尺布局中的变化元素
EN

Stack Overflow用户
提问于 2021-10-12 06:52:16
回答 1查看 427关注 0票数 0

我有一个关于ttk风格的问题。我在把一种定制的风格应用到平纹秤上。具体来说,这意味着,我使用一个图像作为滑块。

现在,我想创建三个不同的尺度,在那里,滑块的颜色是不同的。我将这三个图片存储在一个列表self.slider = [pyimage0, pyimage1, pyimage2]中。

开始ttk样式时:

代码语言:javascript
复制
style = ttk.Style()

style.element_create('custom.Scale.trough', 'image', self.trough)
style.element_create('custom.Scale.slider', 'image', self.slider[0])

style.layout('custom.Horizontal.TScale',
              [('custom.Scale.trough', {'sticky': 'we'}),
               ('custom.Scale.slider',
                {'side': 'left', 'sticky': '',
                 'children': [('custom.Horizontal.Scale.label', {'sticky': ''})]
                })])
style.configure('custom.Horizontal.TScale', background='#ffffff')

现在我想简单地通过彩色滑块改变,当需要的时候。但是,在创建样式元素之后,如何更改滑块图像呢?

我试过:

代码语言:javascript
复制
style.configure('custom.Horizontal.TScale.custom.Scale.slider', image=self.slider[i])

但它只是停留在self.slider[0]上的每一个尺度。

问候和感谢!!

编辑

代码语言:javascript
复制
class CustomScale(ttk.Scale):
    def __init__(self, master=None, **kw):
        kw.setdefault("orient", "horizontal")
        self.variable = kw.pop('variable', DoubleVar(master))
        ttk.Scale.__init__(self, master, variable=self.variable, **kw)
        self._style_name = '{}.custom.{}.TScale'.format(self, kw['orient'].capitalize()) # unique style name to handle the text
        self['style'] = self._style_name
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-12 07:43:15

您需要分别定义每种样式,以便它们有自己独特的名称。

名字是完全任意的,我不得不使用自己的图像,但它是有效的。

我扩展了答案以演示用法。

代码语言:javascript
复制
for i,a in enumerate(["red", "green", "blue"]):

    style.element_create(f'{a}.Scale.trough', 'image', self.trough)
    style.element_create(f'{a}.Scale.slider', 'image', self.slider[i])

    style.layout(f'{a}.Horizontal.TScale',
                  [(f'{a}.Scale.trough', {'sticky': 'we'}),
                   (f'{a}.Scale.slider',
                    {'side': 'left', 'sticky': '',
                     'children': [(f'{a}.Horizontal.Scale.label', {'sticky': ''})]
                    })])
    style.configure(f'{a}.Horizontal.TScale', background='#ffffff')

self.redslider = ttk.Scale(self.master, from_ = 0, to=255, style = "red.Horizontal.TScale")
self.redslider.grid(row = 0, column = 0, sticky = tk.NSEW)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69536237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档