Я пытаюсь создать многоэкранный код для подсчета количества краски, необходимой для покраски комнаты.
Есть экран, на котором я хочу отобразить пользовательские вводы с предыдущего экрана.
class MainWindow(Screen):
panjang= float
lebar= float
tingi= float
luas1 = (panjang*tinggi)/10
luas2= (lebar*tinggi)/10
cat= luas1*2+luas2*2
def logOut(self):
sm.current = "create"
def on_enter(self, *args):
self.panjang.text = "Panjang: " + panjang
self.lebar.text = "Lebar: " + lebar
self.tinggi.text = "Tinggi: " + tinggi
КВ файл:
<MainWindow>:
panjang:panjang
lebar: lebar
tinggi:tinggi
FloatLayout:
Label:
id: panjang
pos_hint:{"x": 0.1, "top":0.9}
size_hint:0.8, 0.2
text: "Panjang: "
Label:
id: lebar
pos_hint:{"x": 0.1, "top":0.7}
size_hint:0.8, 0.2
text: "Lebar: "
Label:
id: tinggi
pos_hint:{"x": 0.1, "top":0.5}
size_hint:0.8, 0.2
text: "Tinggi:"
Button:
pos_hint:{"x":0.2, "y": 0.1}
size_hint:0.6,0.2
text: "Semula"
on_release:
app.root.current = "create"
root.manager.transition.direction = "down"
Входные данные не отображаются, и отображается сообщение об ошибке «Панджанг не определен». Как я могу это исправить? И, судя по моему кодированию, можно вычислить luas1, 2 и cat?
Edit:
Я просто понял, что эти строки вышли в сообщении об ошибке:
78:
79:<MainWindow>:
>> 80: panjang:panjang
81: lebar: lebar
82: tinggi:tinggi
Затем я попытался добавить пробел и добавил другие переменные следующим образом:
panjang: panjang
lebar: lebar
tinggi: tinggi
luas1: luas1
luas2: luas2
cat: cat
Затем вышли следующие строки:
2: name: "create"
3:
>> 4: panjang: panjang
5: lebar: lebar
6: tinggi: tinggi
Почему в этой переменной только ошибка?
Edit2:
Полная кодировка Python:
# main.py
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from database import DataBase
from kivy.properties import NumericProperty
class CreateAccountWindow(Screen):
panjang = ObjectProperty(None)
lebar = ObjectProperty(None)
tinggi = ObjectProperty(None)
def submit(self):
if self.tinggi.text !="":
try:
if float(self.tinggi.text) and float(self.lebar.text) and float(self.panjang.text):
sm.current = "main"
except:
invalidForm()
else:
invalidForm()
def login(self):
self.reset()
sm.current = "main"
def reset(self):
self.panjang.text = ""
self.lebar.text = ""
self.tinggi.text = ""
class MainWindow(Screen):
# Each screen has by default a property manager that gives
# you the instance of the ScreenManager used.
# declare class attributes
panjang = ObjectProperty(None)
lebar = ObjectProperty(None)
tingi = ObjectProperty(None)
# declare and initialize to 0.0 (float)
luas1 = NumericProperty(0.0)
luas2 = NumericProperty(0.0)
cat = NumericProperty(0.0)
def logOut(self):
self.manager.current = "create"
def volume(self):
self.luas1 = float(self.manager.ids.create.panjang.text) * float(self.tinggi) / 10
self.luas2 = (self.lebar * self.tinggi) / 10
self.cat = self.luas1*2 + self.luas2*2
def on_enter(self, *args):
self.volume() # calculate volume
self.panjang.text = "Panjang: " + self.manager.ids.create.panjang.text
self.lebar.text = "Lebar: " + self.manager.ids.create.lebar.text
self.tinggi.text = "Tinggi: " + self.manager.ids.create.tinggi.text
self.luas1.text = "Luas:" + self.manager.ids.main.luas1.text
self.luas2.text = "Luas:" + self.manager.ids.main.luas2.text
self.cat.text = "Luas:" + self.manager.ids.main.cat.text
class WindowManager(ScreenManager):
pass
def invalidLogin():
pop = Popup(title='Invalid Login',
content=Label(text='Invalid username or password.'),
size_hint=(None, None), size=(400, 400))
pop.open()
def invalidForm():
pop = Popup(title='Invalid Form',
content=Label(text='Please fill in all inputs with valid information.'),
size_hint=(None, None), size=(400, 400))
pop.open()
kv = Builder.load_file("banyaknyakerja.kv")
sm = WindowManager()
screens = [CreateAccountWindow(name="create"),MainWindow(name="main")]
for screen in screens:
sm.add_widget(screen)
sm.current = "create"
class MyMainApp(App):
def build(self):
return sm
if __name__ == "__main__":
MyMainApp().run()
полное кодирование KV:
<ScreenManagement>:
CreateWindow:
id:create
name: "create"
MainWindow:
id: main
name: "main"
<CreateAccountWindow>:
panjang: panjang
lebar: lebar
tinggi: tinggi
FloatLayout:
cols:1
FloatLayout:
size: root.width, root.height/2
Label:
text: "serfbgokmfor"
size_hint: 0.8, 0.2
pos_hint: {"x":0.1, "top":1}
font_size: (root.width**2 + root.height**2) / 14**4
Label:
size_hint: 0.5,0.12
pos_hint: {"x":0, "top":0.8}
text: "Panjang: "
font_size: (root.width**2 + root.height**2) / 14**4
TextInput:
pos_hint: {"x":0.5, "top":0.8}
size_hint: 0.4, 0.12
id: panjang
multiline: False
font_size: (root.width**2 + root.height**2) / 14**4
Label:
size_hint: 0.5,0.12
pos_hint: {"x":0, "top":0.8-0.13}
text: "Lebar: "
font_size: (root.width**2 + root.height**2) / 14**4
TextInput:
pos_hint: {"x":0.5, "top":0.8-0.13}
size_hint: 0.4, 0.12
id: lebar
multiline: False
font_size: (root.width**2 + root.height**2) / 14**4
Label:
size_hint: 0.5,0.12
pos_hint: {"x":0, "top":0.8-0.13*2}
text: "Tinggi:"
font_size: (root.width**2 + root.height**2) / 14**4
TextInput:
pos_hint: {"x":0.5, "top":0.8-0.13*2}
size_hint: 0.4, 0.12
id: tinggi
multiline: False
font_size: (root.width**2 + root.height**2) / 14**4
Button:
pos_hint:{"x":0.3,"y":0.25}
size_hint: 0.4, 0.1
font_size: (root.width**2 + root.height**2) / 17**4
text: "Fefrkglt;mlfavsmdmcfr"
on_release:
root.manager.transition.direction = "left"
root.login()
Button:
pos_hint:{"x":0.2,"y":0.05}
size_hint: 0.6, 0.15
text: "Kira"
font_size: (root.width**2 + root.height**2) / 14**4
on_release:
root.manager.transition.direction = "left"
root.submit()
<MainWindow>:
panjang: panjang
lebar: lebar
tinggi: tinggi
luas1: luas1
luas2: luas2
cat: cat
FloatLayout:
Label:
id: panjang
pos_hint:{"x": 0.1, "top":0.9}
size_hint:0.8, 0.2
text: "Panjang: "
Label:
id: lebar
pos_hint:{"x": 0.1, "top":0.8}
size_hint:0.8, 0.2
text: "Lebar: "
Label:
id: tinggi
pos_hint:{"x": 0.1, "top":0.7}
size_hint:0.8, 0.2
text: "Tinggi:"
Label:
id: luas1
pos_hint:{"x": 0.1, "top":0.6}
size_hint:0.8, 0.2
text: "Luas:"
Label:
id: luas2
pos_hint:{"x": 0.1, "top":0.5}
size_hint:0.8, 0.2
text: "Luas:"
Label:
id: cat
pos_hint:{"x": 0.1, "top":0.4}
size_hint:0.8, 0.2
text: "Cat:"
Button:
pos_hint:{"x":0.2, "y": 0.1}
size_hint:0.6,0.2
text: "Semula"
on_release:
app.root.current = "create"
root.manager.transition.direction = "down"