<small id='kufZm'></small><noframes id='kufZm'>

  • <tfoot id='kufZm'></tfoot>
          <bdo id='kufZm'></bdo><ul id='kufZm'></ul>

        <i id='kufZm'><tr id='kufZm'><dt id='kufZm'><q id='kufZm'><span id='kufZm'><b id='kufZm'><form id='kufZm'><ins id='kufZm'></ins><ul id='kufZm'></ul><sub id='kufZm'></sub></form><legend id='kufZm'></legend><bdo id='kufZm'><pre id='kufZm'><center id='kufZm'></center></pre></bdo></b><th id='kufZm'></th></span></q></dt></tr></i><div id='kufZm'><tfoot id='kufZm'></tfoot><dl id='kufZm'><fieldset id='kufZm'></fieldset></dl></div>

      1. <legend id='kufZm'><style id='kufZm'><dir id='kufZm'><q id='kufZm'></q></dir></style></legend>
      2. 如何在kivy中制作圆形进度条?

        时间:2023-10-10

        <i id='ceCFf'><tr id='ceCFf'><dt id='ceCFf'><q id='ceCFf'><span id='ceCFf'><b id='ceCFf'><form id='ceCFf'><ins id='ceCFf'></ins><ul id='ceCFf'></ul><sub id='ceCFf'></sub></form><legend id='ceCFf'></legend><bdo id='ceCFf'><pre id='ceCFf'><center id='ceCFf'></center></pre></bdo></b><th id='ceCFf'></th></span></q></dt></tr></i><div id='ceCFf'><tfoot id='ceCFf'></tfoot><dl id='ceCFf'><fieldset id='ceCFf'></fieldset></dl></div>
            • <small id='ceCFf'></small><noframes id='ceCFf'>

              1. <legend id='ceCFf'><style id='ceCFf'><dir id='ceCFf'><q id='ceCFf'></q></dir></style></legend>
                <tfoot id='ceCFf'></tfoot>
                  <tbody id='ceCFf'></tbody>
                  <bdo id='ceCFf'></bdo><ul id='ceCFf'></ul>

                • 本文介绍了如何在kivy中制作圆形进度条?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我想用 kivy 和 python 制作一个简单的圆形进度条.我搜索了在线文档和 GitHub 曲目,但没有找到解释循环进度条概念的合适示例.

                  I thought to make one simple circular progress bar using kivy and python. I searched online documentation and GitHub repertoires, but not found single proper example explaining the concept of circular progress bar .

                  如下图所示.我想发展.请任何人帮助我解决这个问题.

                  Like the image attached below. I thought to develop. Please anyone help me in this issue.

                  推荐答案

                  新的更好的版本

                  这篇文章受到的关注比我预期的要多,因此我决定花一点精力来创建这个小部件的升级版本.现在可以在 GitHub 上找到它.这是一个可以用它做什么的示例(进度条实际上是透明的,我在 gif 中添加了黑色背景以使所有内容都可见):

                  New, better version

                  This post has received much more attention than I expected, therefore I've decided to put a little bit of effort into creating an upgraded version of this widget. It is now available on GitHub. Here is a sample of what can be done with it (the progress bars are actually transparent, I have added a black background to the gif to make everything visible):

                  如果有人感兴趣,我将保留旧帖子以供参考.

                  I will keep the old post for reference below, if anyone is interested.

                  我制作了一个小部件来代表您想要实现的目标.但是,确切地说,有一些限制:

                  I've made a widget to represent what you want to achieve. There are some limitations however, precisely:

                  1. 您需要调用 set_value 方法,而不是仅仅使用 .value 设置进度条值.我非常不确定应该做些什么来实现与原始 ProgressBar 类中相同的行为;

                  1. Instead of just setting the progress bar value using .value, you need to call the set_value method. I am very unsure what should be done to achieve the same behaviour as in original ProgressBar class;

                  你必须指定大小才能实现圆形,因为对象本身就是一个椭圆.

                  You have to specify the size to achieve a circle, because the object itself is an ellipse.

                  这里是代码,还有示例用法:

                  Here is the code, also with example usage:

                  from kivy.app import App
                  from kivy.uix.progressbar import ProgressBar
                  from kivy.core.text import Label as CoreLabel
                  from kivy.lang.builder import Builder
                  from kivy.graphics import Color, Ellipse, Rectangle
                  from kivy.clock import Clock
                  
                  
                  class CircularProgressBar(ProgressBar):
                  
                      def __init__(self, **kwargs):
                          super(CircularProgressBar, self).__init__(**kwargs)
                  
                          # Set constant for the bar thickness
                          self.thickness = 40
                  
                          # Create a direct text representation
                          self.label = CoreLabel(text="0%", font_size=self.thickness)
                  
                          # Initialise the texture_size variable
                          self.texture_size = None
                  
                          # Refresh the text
                          self.refresh_text()
                  
                          # Redraw on innit
                          self.draw()
                  
                      def draw(self):
                  
                          with self.canvas:
                              
                              # Empty canvas instructions
                              self.canvas.clear()
                  
                              # Draw no-progress circle
                              Color(0.26, 0.26, 0.26)
                              Ellipse(pos=self.pos, size=self.size)
                  
                              # Draw progress circle, small hack if there is no progress (angle_end = 0 results in full progress)
                              Color(1, 0, 0)
                              Ellipse(pos=self.pos, size=self.size,
                                      angle_end=(0.001 if self.value_normalized == 0 else self.value_normalized*360))
                  
                              # Draw the inner circle (colour should be equal to the background)
                              Color(0, 0, 0)
                              Ellipse(pos=(self.pos[0] + self.thickness / 2, self.pos[1] + self.thickness / 2),
                                      size=(self.size[0] - self.thickness, self.size[1] - self.thickness))
                  
                              # Center and draw the progress text
                              Color(1, 1, 1, 1)
                              #added pos[0]and pos[1] for centralizing label text whenever pos_hint is set
                              Rectangle(texture=self.label.texture, size=self.texture_size,
                                    pos=(self.size[0] / 2 - self.texture_size[0] / 2 + self.pos[0], self.size[1] / 2 - self.texture_size[1] / 2 + self.pos[1]))
                  
                  
                      def refresh_text(self):
                          # Render the label
                          self.label.refresh()
                  
                          # Set the texture size each refresh
                          self.texture_size = list(self.label.texture.size)
                  
                      def set_value(self, value):
                          # Update the progress bar value
                          self.value = value
                  
                          # Update textual value and refresh the texture
                          self.label.text = str(int(self.value_normalized*100)) + "%"
                          self.refresh_text()
                  
                          # Draw all the elements
                          self.draw()
                  
                  
                  class Main(App):
                  
                      # Simple animation to show the circular progress bar in action
                      def animate(self, dt):
                          if self.root.value < 80:
                              self.root.set_value(self.root.value + 1)
                          else:
                              self.root.set_value(0)
                  
                      # Simple layout for easy example
                      def build(self):
                          container = Builder.load_string(
                              '''CircularProgressBar:
                      size_hint: (None, None)
                      height: 200
                      width: 200
                      max: 80''')
                  
                          # Animate the progress bar
                          Clock.schedule_interval(self.animate, 0.1)
                          return container
                  
                  
                  if __name__ == '__main__':
                      Main().run()
                  

                  输出:

                  这篇关于如何在kivy中制作圆形进度条?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:在 Kivy 中构建简单的进度条或加载动画? 下一篇:SDL2 错误:“无法加载图像 &lt;default.png&gt;

                  相关文章

                  最新文章

                    <bdo id='FVgIg'></bdo><ul id='FVgIg'></ul>

                  <legend id='FVgIg'><style id='FVgIg'><dir id='FVgIg'><q id='FVgIg'></q></dir></style></legend>

                  <small id='FVgIg'></small><noframes id='FVgIg'>

                • <tfoot id='FVgIg'></tfoot>
                  <i id='FVgIg'><tr id='FVgIg'><dt id='FVgIg'><q id='FVgIg'><span id='FVgIg'><b id='FVgIg'><form id='FVgIg'><ins id='FVgIg'></ins><ul id='FVgIg'></ul><sub id='FVgIg'></sub></form><legend id='FVgIg'></legend><bdo id='FVgIg'><pre id='FVgIg'><center id='FVgIg'></center></pre></bdo></b><th id='FVgIg'></th></span></q></dt></tr></i><div id='FVgIg'><tfoot id='FVgIg'></tfoot><dl id='FVgIg'><fieldset id='FVgIg'></fieldset></dl></div>