Как использовать ООП в Kivy Python?

#python #python-3.x #kivy #kivy-language #kivymd

Вопрос:

Пожалуйста, помогите мне, мое соревнование не за горами
, я пытался использовать ООП в Киви. Это мой простой код на Python для тестирования:

 class location:

    def __init__(self, total_house, total_land):
        self.total_house = total_house
        self.total_land = total_land


class test(BoxLayout):

    def addNum(self):
        App.get_running_app().x.total_house  = 1

class testApp(App):
    x = location(NumericProperty(10),NumericProperty(5))


testApp().run()
 

это мое личное дело:

 <test>:
    orientation: 'vertical'
    Label:
        text: str(app.x.total_house)
    Button:
        text: 'add'
        on_press: root.addNum()
 

Это и есть результат

Я хочу, чтобы на выходе было 10, и при нажатии кнопки число добавляется на единицу.

Пожалуйста, помогите мне, я новичок в КИВИ

Комментарии:

1. Вы пробовали заменить x = location(NumericProperty(10),NumericProperty(5)) на x = location(10, 5) ?

2. что такое numberx ?

3. @RufusVS извини, что на самом деле x.total_house

4. @Weebify, если я заменю его на location (10,5) Я не могу добавить их на 1. это покажет 10 и 5, даже если я нажал кнопку. (Извините, мой английский плохой)

5. Ты проверил мой ответ?

Ответ №1:

Одним из способов получения чистого значения из свойства Kivy является использование встроенного .get(EventDispatcher obj) метода из kivy.properties.Property класса:

 class test(BoxLayout):
    def addNum(self):
        App.get_running_app().x.get(EventDispatcher())  = 1
 

Но перед этим вам нужно сначала импортировать EventDispatcher класс:

 from kivy._event import EventDispatcher
 

Также, пожалуйста, обратите внимание, что, хотя это работает в теории и действительно изменит значение переменной x, я бы рекомендовал напрямую изменить собственный текст метки, что-то вроде этого:

.py

 def numberify(*args):
    # This functions is for universally changing str to either int or float
    # so that it doesn't happen to return something like 8.0 which isn't that great
    a = []
    for w in range(0, len(args)):
        try:
            a.append(int(args[w]))
        except ValueError:
            a.append(float(args[w]))
    return a if len(a) > 1 else a[0]

class test(BoxLayout):
    def addNum(self):
        self.ids.label1.text = str(numberify(self.ids.label1.text)   1)
 

.кв

 <test>:
    orientation: 'vertical'
    Label:
        id: label1
        text: str(app.x.total_house)
    Button:
        id: button1
        text: 'add'
        on_press: root.addNum()
 

Узнайте больше о свойствах Kivy здесь и поймите, что не всегда необходимо их использовать 🙂