Witam,
Mam następujący problem z aplikacją w kivy. Mam label i button. Tekst ładuje się do Label z pickle. Po wciśnięciu button wyzwalają się 2 funkcję. Pierwsza to aktualizacja pliku pickle. Kolejna powinna zaktualizować tekst Label. Ta druga nie działa. Zawartość pickle się zmienia ale do Label załaduje się dopiero po ponownym uruchomieniu programu. Będę wdzięczny za każda pomoc. Podaje tylko przykładowy uproszczony kod.
.py
from kivy.app import App
import pickle
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.screenmanager import ScreenManager, Screen
rom kivy.properties import ObjectProperty
import random
class MainScreen(Screen):
with open("a.pickle", 'rb') as f:
a = pickle.load(f)
text = "%s" % a
def update_pickle(self):
with open("a.pickle", 'rb') as f:
a = pickle.load(f)
a.clear()
lista = ["a", "b", "c", "d"]
a[str(random.choice(lista))] = '0'
with open("a.pickle", "wb") as f:
pickle.dump(a, f)
def update_label(self):
with open("a.pickle", 'rb') as f:
a = pickle.load(f)
text = "%s" % a
return text
sm = ScreenManager()
sm.add_widget(MainScreen(name='Main'))
class App(App):
def build(self):
return sm
if __name__ == '__main__':
App().run()
.kv
<MainScreen>
Button:
text_size: self.size
pos_hint: {'x': .67, 'y': .80}
size_hint: .25, .03
background_color:2, 2, 2
text: 'Update label'
on_press:
root.update_pickle()
root.update_label()
Label:
Label: #a
text_size: self.size
pos_hint: {'x': .05, 'y': .60}
size_hint: .80, .20
background_color:2, 2, 2
text: root.text