Python - Kivy: ярлык не обновляется во время выполнения функции - PullRequest
1 голос
/ 06 января 2020

Я видел, что есть другие темы, связанные с этой, но я мог бы заставить этот простой проект работать. Мне нужно обновить ярлык со статусом функции во время его выполнения, чтобы дать пользователю знать, что программа все еще работает во время обработки функции, но ярлык обновляется только после завершения функции

Здесь это файлы

my.kv

WindowManager:
    ChangeLabel:
<ChangeLabel>:
    BoxLayout:
        orientation: 'vertical'
        padding: 200, 20
        Label: 
            id: labeltxt
            text: 'Text to change'
            font_size: 30           
            height: 50
        Button:
            text:'Run Function'
            size_hint_y: None
            height: 30
            on_release:
                root.changeLabel()
        Label: 

test.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang.builder import Builder
from kivy.core.window import Window
import time
from kivy.clock import Clock

class ChangeLabel(Screen):
    def changeLabel(self):
        Clock.schedule_once(self.test)

    def test(self, dt):
        self.ids.labeltxt.text = 'Function is running...'#I wanna this in lablel while function is running
        time.sleep(2)# function to run
        self.ids.labeltxt.text = 'Completed'


class WindowManager (ScreenManager):
    pass

kv = Builder.load_file('my.kv')
class MyApp(App):
    def build(self):
        return kv

MyApp().run()

1 Ответ

1 голос
/ 06 января 2020

Я сделал это решение, теперь оно работает так, как я хочу, но не уверен, что это лучший способ.

test.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang.builder import Builder
from kivy.core.window import Window
import time
from kivy.clock import Clock

class ChangeLabel(Screen):
    i = 0
    def changeLabel(self):
        Clock.schedule_interval(self.test, 0.05)

    def test(self, dt):
        if self.i == 0:
            self.ids.labeltxt.text = 'Function is running...'
            self.i = 1
        else:
            time.sleep(2)# function to run
            self.ids.labeltxt.text = 'Completed'
            self.i = 0
            Clock.unschedule(self.test)

class WindowManager (ScreenManager):
    pass

kv = Builder.load_file('my.kv')
class MyApp(App):
    def build(self):
        return kv

MyApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...