带有百分比标签的进度栏?

发布于 2021-01-29 14:09:44

如何在显示百分比的进度条中间放置标签?问题是python不支持标签背景的透明性,所以我不知道该如何解决。

关注者
0
被浏览
186
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用可以做到这一点ttk.Style。这个想法是修改Horizontal.TProgressbar样式的布局(Vertical.TProgressbar对垂直进度条做同样的事情),在样式条中添加一个标签:

    通常的Horizontal.TProgressbar布局:

    [('Horizontal.Progressbar.trough',
      {'children': [('Horizontal.Progressbar.pbar',
         {'side': 'left', 'sticky': 'ns'})],
       'sticky': 'nswe'})]
    

    带有附加标签:

    [('Horizontal.Progressbar.trough',
      {'children': [('Horizontal.Progressbar.pbar',
         {'side': 'left', 'sticky': 'ns'})],
       'sticky': 'nswe'}),
     ('Horizontal.Progressbar.label', {'sticky': 'nswe'})]
    

    然后,可以使用来更改标签的文本style.configure

    这是代码:

    import tkinter as tk
    from tkinter import ttk
    
    root = tk.Tk()
    
    style = ttk.Style(root)
    # add label in the layout
    style.layout('text.Horizontal.TProgressbar', 
                 [('Horizontal.Progressbar.trough',
                   {'children': [('Horizontal.Progressbar.pbar',
                                  {'side': 'left', 'sticky': 'ns'})],
                    'sticky': 'nswe'}), 
                  ('Horizontal.Progressbar.label', {'sticky': ''})])
    # set initial text
    style.configure('text.Horizontal.TProgressbar', text='0 %')
    # create progressbar
    variable = tk.DoubleVar(root)
    pbar = ttk.Progressbar(root, style='text.Horizontal.TProgressbar', variable=variable)
    pbar.pack()
    
    def increment():
        pbar.step()  # increment progressbar 
        style.configure('text.Horizontal.TProgressbar', 
                        text='{:g} %'.format(variable.get()))  # update label
        root.after(200, increment)
    
    increment()
    
    root.mainloop()
    

    结果的屏幕截图



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看