【问题标题】:How to display a progress bar on Kivy如何在 Kivy 上显示进度条
【发布时间】:2020-09-23 05:26:38
【问题描述】:

我正在使用 Kivy 开发一个界面。我尝试在右上角放置一个进度条,或者在文本中放置一个每秒变化的数字。有点像这里的例子:Kivy custom shaders touch events。当我启动应用程序时,进度条不可见。

这是我希望展示的示例。

main.py:

class Star:
    angle = 0
    distance = 0
    size = 0.1

    def __init__(self, sf, i):
        self.sf = sf
        self.j = 4 * i * sf.vsize
        self.reset()

    def reset(self):
        self.angle = 2 * math.pi * random()
        self.distance = 90 * random() + 10
        self.size = 0.05 * random() + 0.05

    def iterate(self):
        return range(self.j,
                     self.j + 4 * self.sf.vsize,
                     self.sf.vsize)

    def update(self, x0, y0):
        x = x0 + self.distance * math.cos(self.angle)
        y = y0 + self.distance * math.sin(self.angle)

        for i in self.iterate():
            self.sf.vertices[i:i + 3] = (x, y, self.size)

【问题讨论】:

  • 发布一个示例,其中不包含任何不必要的细节(即所有此图),并且包含您尝试显示进度条的尝试。

标签: python kivy


【解决方案1】:

ProgressBar 添加到显示器的最简单方法是使用Layout 作为显示器的根,而不是使用Starfield 作为根。因此,如果您使用这样的kv 字符串定义您的显示:

kv = '''
FloatLayout:
    Starfield:
        id: sf
        progress: pb
    ProgressBar:
        id: pb
        pos_hint: {'right':1.0, 'top':1.0}
        size_hint: (0.25, 0.1)
'''

然后你可以在你的 build() 方法中使用它:

class StarfieldApp(App):
    def build(self):
        EventLoop.ensure_window()
        return Builder.load_string(kv)

    def on_start(self):
        Clock.schedule_interval(self.root.ids.sf.update_glsl, 60 ** -1)

请注意Clock.schedule_interval() 参数已更改(因为Starfield 不再是根)。

然后,您只需在 update_glsl() 方法中添加对 ProgressBar 的更新即可。像这样的:

self.progress.value += 1

将演示概念,但显然不是完整的解决方案。

【讨论】:

  • 当我尝试它时它起作用了。当你尝试它时会发生什么?你有任何错误吗?
  • 进度条黑屏,但是星星消失了
  • 其实我只是想在应用的右上角添加一个进度条,或者是一个文本和一个第二个计数器。
  • 检查您的Clock.schedule_interval() 呼叫是否已更改。
  • 问题只是初始化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多