【问题标题】:tkinter.ttk.Progressbar: How to change thickness of a horizontal bartkinter.ttk.Progressbar:如何更改水平条的粗细
【发布时间】:2013-07-28 13:39:50
【问题描述】:

我在我的应用程序中使用ttk.Progressbar。我已经在网上搜索了答案,但无济于事。

我有以下运行良好的代码。但我想改变条的粗细。

progressbar = ttk.Progressbar(myGui, orient=HORIZONTAL,
                              length=400, mode="determinate",
                              variable=value_progress,
                              )
progressbar.pack()

我希望长度仍然是 400,但是从条形图的顶部到底部,我希望减少它的一半或小于一半。 (可以这么说,我想让我的酒吧节食)

但我正在努力寻找解决方案。

安迪的想法?提前致谢。

【问题讨论】:

    标签: python python-3.x tkinter ttk


    【解决方案1】:

    如果您必须使用 xpnative 主题或类似的主题,那么您可能无法以传统方式更改粗细。但是,如果您使用默认主题,则可以使用样式配置粗细。可能还有其他主题也可以让您执行此操作,如果您要经常使用程序的外观和感觉,您可能希望使用这些主题。

    from Tkinter import *
    from ttk import *
    
    def main():
        root = Tk()
        s = Style()
        s.theme_use("default")
        s.configure("TProgressbar", thickness=50)
        pb = Progressbar(root, style="TProgressbar")
        pb.pack() 
        root.mainloop()
    
    main()
    

    【讨论】:

      【解决方案2】:

      ttk progress bar 在 Python 中似乎缺少宽度选项。

      使用解决方法 (here) 解决 Tkinter 按钮的问题。由此我已经能够创建一个可行的解决方案。

      解决问题的关键是将进度条添加到画布内的window。在画布内使用窗口不会导致在添加小部件时画布调整大小,这意味着我们可以控制进度条的宽度。

      我已经创建了一些工作示例代码:

      from ttk import Progressbar
      import Tkinter
      
      class Example(Tkinter.Frame):
          def __init__(self, parent):
              Tkinter.Frame.__init__(self, parent)
              self.parent = parent
              self.initUI()
      
          def initUI(self):
              value_progress =50
              self.parent.title("Progressbar Thingymawhatsit")
              self.config(bg = '#F0F0F0')
              self.pack(fill = Tkinter.BOTH, expand = 1)
                      #create canvas
              canvas = Tkinter.Canvas(self, relief = Tkinter.FLAT, background = "#D2D2D2",
                                                  width = 400, height = 5)
      
              progressbar = Progressbar(canvas, orient=Tkinter.HORIZONTAL,
                                        length=400, mode="indeterminate",
                                        variable=value_progress,
      
                                        )
              # The first 2 create window argvs control where the progress bar is placed
              canvas.create_window(1, 1, anchor=Tkinter.NW, window=progressbar)
              canvas.grid()
      
      
      def main():
          root = Tkinter.Tk()
          root.geometry('500x50+10+50')
          app = Example(root)
          app.mainloop()
      
      if __name__ == '__main__':
          main()
      

      所以总结一下进度条是一样大的,但是你看不到一半!

      【讨论】:

      • 非常感谢。人们会认为我们可以直接控制它。但是,不支持该部分只会让人跳出框框思考。这是开箱即用的。
      • 我花了一段时间才弄明白。知道将它添加到画布会有所帮助,但画布随后会调整为进度条的大小!那是我找到 canvas create_window 选项的时候。很高兴它的工作,+1 如果它有帮助
      • 在上面的例子让我思考之后,我想了很多,想出了下面的想法。首先,创建一个不会扩展的框架:其次,将进度条放在框架内。最后,用框架的高度属性控制进度条的粗细。 # 进度条和框架 y= LabelFrame(root, width=400, border = 0, height=5) y.pack(pady=0) y.pack_propagate(0) pro= ttk.Progressbar(y, mode='determinate',长度=400) pro.pack(side=BOTTOM)
      【解决方案3】:

      您可以使用包管理器的ipady 选项。

      progressbar = ttk.Progressbar(myGui, orient=HORIZONTAL,
                                length=400, mode="determinate",
                                variable=value_progress,
                                )
      progressbar.pack(ipady=10)
      

      【讨论】:

      • 更简单的解决方案。
      猜你喜欢
      • 2012-10-12
      • 2018-02-02
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 2011-02-02
      • 1970-01-01
      • 2011-05-08
      相关资源
      最近更新 更多