Я создавал приложение и изо всех сил пытался заставить индикатор выполнения обновляться после вызова каждой функции. В приведенном ниже коде я намеревался вызвать функцию, а затем, как только эта функция будет завершена, я обновлю атрибут self.load новым значением. После присвоения self.load нового значения я хочу передать его на индикатор выполнения в kivy, чтобы его значение увеличилось и оно отображалось на экране.
import SEOProgram
import time
import os
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.clock import Clock
from kivy.uix.widget import Widget
from kivy.uix.progressbar import ProgressBar
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
class progBar(GridLayout):
pass
class ThirdWindow(Screen):
pass
class SecondWindow(Screen):
pb = ProgressBar()
def __init__(self, **kwargs):
super(SecondWindow, self).__init__(**kwargs)
self.load = 0
#self.update_bar = Clock.create_trigger(self.update_value)
pass
def calculate(self):
#ids = SecondWindow()
#print(ids.ids)
with open("keyword.txt", "r") as keywordread:
keyphrase = keywordread.readlines()
phrase = keyphrase
self.ids.pb.value = self.ids.pb.value
main_URL = "https://google.com/search?q=" + str(phrase)
os.remove("keyword.txt")
SEOProgram.FirstPage.first_page_crawl(main_URL)
self.load = 10 # the value is supposed to increase after each function
#self.update_value()
time.sleep(10)
SEOProgram.remove_urls()
self.load = 30
SEOProgram.InternalLinks.get_internal()
#time.sleep(10)
SEOProgram.ExternalLinks.get_external()
#time.sleep(10)
SEOProgram.FindImages.get_images()
#time.sleep(10)
SEOProgram.WordCounter.count_words()
#time.sleep(10)
SEOProgram.WordCounter.show_word_count()
#def update_value(self, dt=None):
# if self.load <= 10000:
# self.load += 10
# self.ids.pb.value += self.load
# self.update_bar()
class SEOLabel(Screen):
def __init__(self, **kwargs):
super(SEOLabel, self).__init__(**kwargs)
main_keyword = ObjectProperty(None)
def submit(self):
self.keyword = self.main_keyword.text
print(self.keyword)
with open("keyword.txt", "w") as keywordfile:
keywordfile.write(self.keyword)
class WindowManager(ScreenManager):
pass
seofile = Builder.load_file("seo.kv")
class SEOApp(App):
def build(self):
return seofile
if __name__ == "__main__":
SEOApp().run()
Ниже приведен файл kv:
WindowManager:
SEOLabel:
SecondWindow:
ThirdWindow:
<SEOLabel>:
name: "main"
main_keyword: keyword
Label:
text: "Enter Your Keyword Below:"
font_size: 40
pos_hint: {'y' : 0.2}
TextInput:
id: keyword
hint_text: "Keyword"
multiline: False
width: 200
size_hint: None, None
height: 40
pos: root.width / 2.5, root.height / 2
Button:
text: "Access Keyword"
size_hint: 0.5, 0.2
pos: root.width / 3.75, root.height / 5
on_release:
root.submit()
app.root.current = "main" if keyword.text == "" else "second"
root.manager.transition.direction = "left"
<SecondWindow>:
name: "second"
pb: pb
Label:
text: "Click Button To Get Results"
font_size: root.width / 30
pos_hint: {"x" : 0.5, "y" : 0.5}
ProgressBar:
id: pb
size: 200, 200
max: 100
value: root.load
canvas:
Color:
rgb: .45, .28, .5
pos_hint: {"x" : 0.5, "y" : 0.3}
Button:
text: "Get Results"
size_hint: None, None
pos_hint: {"x" : 0.5, "y" : 0.1}
on_release:
root.calculate()
<ThirdWindow>:
name: "third"
Button:
text: "Enter New Keyword?"
height: 100
width: 200
on_release:
app.root.current = "main"
Что мне делать?