#python #kivy
Вопрос:
Вот файл py
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import Screen
from kivy.properties import ListProperty
from kivy.lang import Builder
from kivy.properties import BooleanProperty, NumericProperty
from kivy.uix.togglebutton import ToggleButton
import string
import random
class MyGrid(Widget):
name = ObjectProperty(None)
email = ObjectProperty(None)
bmi = NumericProperty(0)
def btn(self):
height = float(self.name.text)
weight = float(self.email.text)
bmi = weight/(height*height)
print("Name:", self.name.text, "email:", self.email.text, "bmi:", str(bmi))
self.name.text = ""
self.email.text = ""
show_popup()
class P(FloatLayout):
pass
class MyApp(App):
def build(self):
return MyGrid()
def show_popup():
show = P()
popupWindow = Popup(title="BMI", content=show, size_hint=(None,None),size=(400,400))
popupWindow.open()
if __name__ == "__main__":
MyApp().run()
Вот файл kv
<MyGrid>:
name: name
email: email
GridLayout:
cols:1
size: root.width - 200, root.height -200
pos: 100, 100
GridLayout:
cols:2
Label:
text: "Height: "
TextInput:
id: name
multiline:False
Label:
text: "Weight: "
TextInput:
id: email
multiline:False
Button:
text:"Submit"
on_release: root.btn()
<P>:
Label:
text: "Your BMI is: "
size_hint: 0.6, 0.2
pos_hint: {"x":0.2, "top":1}
Как вы отображаете значение переменной » ИМТ » в метке. Я хочу, чтобы во всплывающем сообщении отображался следующий текст: «Ваш ИМТ:» ИМТ, но когда я это делаю, это выдает ошибку. Как вы отображаете переменную в файле kv. Это очень простой вопрос, но я, кажется, нигде не могу найти ответа. Вы просто говорите текст: «Ваш ИМТ:» root.bmi, потому что я пробовал это, но это не сработало.
Ответ №1:
Один из способов сделать это-просто передать индекс массы тела в show()
метод. Вот модифицированный show()
метод, который делает это:
def show_popup(bmi):
show = P()
popupWindow = Popup(title="BMI", content=show, size_hint=(None, None), size=(400, 400))
show.ids.bmi.text = "Your BMI is: " str(bmi)
popupWindow.open()
Вышесказанное требует наличия id
в kv
:
<P>:
Label:
id: bmi
text: "Your BMI is: "
size_hint: 0.6, 0.2
pos_hint: {"x":0.2, "top":1}
И небольшое изменение btn()
метода для передачи значения ИМТ:
def btn(self):
height = float(self.name.text)
weight = float(self.email.text)
bmi = weight / (height * height)
print("Name:", self.name.text, "email:", self.email.text, "bmi:", str(bmi))
self.name.text = ""
self.email.text = ""
show_popup(bmi)