#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 здесь и поймите, что не всегда необходимо их использовать 🙂