Python Forum
[Kivy] GUI properties defined (and changed) by variables in .py file - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [Kivy] GUI properties defined (and changed) by variables in .py file (/thread-12058.html)



GUI properties defined (and changed) by variables in .py file - j.crater - Aug-07-2018

Hello all,
I am trying to make a basis for a MVC-sytle program, where GUI properties (in .kv file) would be stored and accessed from a separate .py file. I tried a couple of things, but as I am not yet too familiar with Kivy, I had no success so far.
Value of label_text does change with pressing buttons (increment or decrement), but label text remains same ("0"), though I would like it to change dynamically.
The code in files is:

main.py:

from kivy.app import App

import values


class MainApp(App):
    def increment(self):
        values.label_text = str(int(values.label_text) + 1)

    def decrement(self):
        values.label_text = str(int(values.label_text) - 1)


if __name__ == '__main__':
    MainApp().run()
values.py:
from kivy.properties import StringProperty


label_text = "0"
# label_text = StringProperty("0") # gives: ValueError: Label.text accept only str
main.kv:
#:import val values


BoxLayout:
    orientation: "vertical"

    Label:
        text: val.label_text

    Button:
        text: "increment"
        on_press: app.increment()

    Button:
        text: "decrement"
        on_press: app.decrement()
Any tips are most appreciated, thanks.
JC


RE: GUI properties defined (and changed) by variables in .py file - buran - Aug-07-2018

main.py

from kivy.app import App
from kivy.properties import StringProperty
import values

class MainApp(App):
    label_text = StringProperty()
    def build(self):
        self.label_text = values.label_text
    def increment(self):
        self.label_text = str(int(self.label_text) + 1)
    def decrement(self):
        self.label_text = str(int(self.label_text) - 1)
 
if __name__ == '__main__':
    MainApp().run()
main.kv
Output:
BoxLayout: orientation: "vertical" Label: text: app.label_text Button: text: "increment" on_press: app.increment() Button: text: "decrement" on_press: app.decrement()
values.py
label_text = "0"
However I would use kivy.config and eventually add kivy.settings to initialize and have settings shown to user


RE: GUI properties defined (and changed) by variables in .py file - j.crater - Aug-07-2018

Thanks buran, this works.
Meanwhile I played with a bit more complex "settings", such as saving properties in objects as their attributes.
Kivy ObjectProperty and EventDispatcher came in very handy here and seem to be quite powerful tools. And hopefully not too dangerous in hands of a beginner :)