Kivy Как я могу создать счетчик времени с прогрессбаром? - PullRequest
0 голосов
/ 11 июля 2019

Я хочу сделать счетчик времени с прогрессбаром. Бар должен заполняться с течением времени.

Я придерживался логики в приведенных ниже кодах, но код запускается до открытия программы.

Бар должен набиваться каждую секунду. По крайней мере, я так думаю.

'''
def update_time(self):
    while self.ids.pb.value < 30:
        time.sleep(1)
        self.ids.pb.value+=1
'''

Связанный файл .kv.

'''
<Question>:
    name:"questions"
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'bg2.jpg'
    FloatLayout:

        Label:
            id:quest
            pos_hint: {"x":0.1,"y":0.62}
            size_hint: 0.7,0.5
            text:root.sendquest()
            color:1, 0, 0, 1

        ProgressBar:
            id : pb
            min :0
            max :30
            pos_hint: {'x': 0.1,"y":0.45}
            size_hint_x :0.8
            size_hint_y :0.03
            background_color:0.8, 0.1, 0.1, 0
        Button: #A
            id:A
            pos_hint: {"x":0.045,"y":0.376}
            size_hint: 0.91,0.055
            on_press:
                root.reset() if root.check_truth("A") else root.popup()
'''

В файле main.py есть функции, не относящиеся к этой теме.

1 Ответ

0 голосов
/ 11 июля 2019

Руководство по программированию Kivy »События и свойства

В приложениях Kivy вы должны избегать длинных / бесконечных циклов или спать.

Решение

Решение состоит в том, чтобы использовать Триггерные события (например, create_trigger() функция) или Интервал планирования (например, schedule_interval() функция). * * тысяча двадцать-одна

Отрывки - schedule_interval()

from kivy.properties import ObjectProperty
from kivy.clock import Clock


class RootWidget(ProgressBar):
    tick = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.max = 30
        self.tick = Clock.schedule_interval(lambda dt: self.update_time(), 1)

    def update_time(self):
        self.value += 1
        if self.value >= 30:
            self.tick.cancel()    # cancel event

Отрывки - create_trigger()

from kivy.properties import ObjectProperty
from kivy.clock import Clock


class RootWidget(ProgressBar):
    tick = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.max = 30
        self.tick = Clock.create_trigger(lambda dt: self.update_time(), 1)
        self.tick()

    def update_time(self):
        self.value += 1
        if self.value < 30:
            self.tick()
        else:
            self.tick.cancel()    # cancel event
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...