在 kivy 上 class 之间传递值时为空白值?
Blank value when passing values between class on kivy?
在这种情况下,我将在 class 或 Screen 之间传递值,但打印时这些值是空的。这是我的 py 代码:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
class MyLayout(Screen):
pstd=ObjectProperty(None)
def save():
pass
def calculate(self):
pstd=self.pstd.text
pres=self.pres.text
tres=self.tres.text
tsep=self.tsep.text
psep=self.psep.text
api=self.api.text
dg=self.sg.text
pb=self.pb.text
co2=self.co2.text
h2s=self.h2s.text
n2=self.n2.text
tds=self.tds.text
if(self.sat.state == "down"):
cond = 2
else :
cond = 1
print(pstd)
return pstd
class MyLayout2(Screen):
def press(self):
print(App.get_running_app().my_layout.calculate())
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("tubes.kv")
class TubesApp(App):
my_layout = MyLayout()
def build(self):
return kv
if __name__ == "__main__":
TubesApp().run()
这是我的 kv 代码:
WindowManager:
MyLayout:
MyLayout2:
<MyLayout>:
name: "main"
free:free
sat:sat
pstd:pstd
tres:tres
pres:pres
tsep:tsep
psep:psep
api:api
sg:sg
pb:pb
co2:co2
h2s:h2s
n2:n2
tds:tds
btn:btn
background_color : 71/255,213/255,223/255,1
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
FloatLayout :
size : root.width,root.height
Label :
text : "PVT Calculator"
font_size : 20
size_hint : (None,None)
size : 400,100
color: 1,1,1,1
pos_hint : {"center_x":0.5,"top" : 1}
background_color : (35/255,135/255,142/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Oil Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.25,"top" : 0.8}
background_color : (71/255,220/255,141/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "API"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0, "top":0.712}
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:api
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.712}
Label :
text : "Saturation pressure"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0, "top":0.672}
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pb
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.672}
Label :
text : "Spesific Gravity"
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0, "top":0.632}
color: 1,1,1,1
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:sg
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.632}
Label :
text : "Non-Hydrocarbon Component"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.75,"top" : 0.8}
background_color : (14/255,195/255,110/225,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "CO2"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.712}
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:co2
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.712}
Label :
text : "H2S"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.672}
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:h2s
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.672}
Label :
text : "N2"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.632}
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:n2
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.632}
Label :
text : "Reservoir and Separator Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.25,"top" : 0.5}
background_color : (14/255,195/255,110/225,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Reservoir Temperature"
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0, "top":0.41}
color: 1,1,1,1
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tres
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.41}
Label :
text : "Initial Reservoir pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,200
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pres
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,200
Label :
text : "Separator Temperature"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,175
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tsep
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,175
Label :
text : "Separator pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,150
background_color : (9/255,181/255,101/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:psep
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,150
Label :
text : "Standard pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,125
background_color : (10/255,209/255,116/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pstd
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,125
Label :
text : "Water Formation Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.75,"top" : 0.5}
background_color : (71/255,220/255,141/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
size_hint : (None,None)
size : 400,125
color: 0.3,0.4,0.5,1
pos: 400,125
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Condition"
font_size : 12
size_hint : (None,None)
size : 400,25
color: 1,1,1,1
pos : 400,225
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
ToggleButton :
id:sat
text : "Gas-Saturated Brine"
size_hint : (None,None)
size : 180, 60
pos : 420, 155
group : 'Condition'
ToggleButton :
id:free
text : "Gas-Free Brine"
size_hint : (None,None)
size : 180, 60
pos : 610, 155
group : 'Condition'
state: "normal"
Label :
text : "Total Dissolved Solid"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 400,125
background_color : (10/255,209/255,116/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tds
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 600,125
Button :
id:btn
text : "CALCULATE"
size_hint : (None,None)
size : 180, 60
pos_hint : {"center_x":0.5,"y":0.05}
on_press : root.calculate()
on_release : app.root.current = "second"
<MyLayout2>:
name : "second"
ubah:ubah
GridLayout :
cols : 1
Label :
id:ubah
text : "test"
Button :
text : "Back"
on_press : root.press()
on_release : app.root.current = "main"
我试图在传递给另一个 class 之前打印它,所以它在其中时有值 class 但在更改 class 时为空,谁能帮我解决这个问题我是基维新人
该值为空,因为该函数无法看到当前 运行 class 具有您想要的值。如果您想查看您所做的更改而不是初始值,您需要让 classes 看到彼此。
首先获取您的应用程序 运行,然后转到其屏幕管理器。在那里你可以得到你想要的值的屏幕,然后执行函数。
class MyLayout2(Screen):
def press(self):
running = App.get_running_app()
manager = running.root
layout1 = manager.get_screen('main')
print(layout1.calculate())
# Or just print(App.get_running_app().root.get_screen('main').calculate())
在这种情况下,我将在 class 或 Screen 之间传递值,但打印时这些值是空的。这是我的 py 代码:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
class MyLayout(Screen):
pstd=ObjectProperty(None)
def save():
pass
def calculate(self):
pstd=self.pstd.text
pres=self.pres.text
tres=self.tres.text
tsep=self.tsep.text
psep=self.psep.text
api=self.api.text
dg=self.sg.text
pb=self.pb.text
co2=self.co2.text
h2s=self.h2s.text
n2=self.n2.text
tds=self.tds.text
if(self.sat.state == "down"):
cond = 2
else :
cond = 1
print(pstd)
return pstd
class MyLayout2(Screen):
def press(self):
print(App.get_running_app().my_layout.calculate())
class WindowManager(ScreenManager):
pass
kv = Builder.load_file("tubes.kv")
class TubesApp(App):
my_layout = MyLayout()
def build(self):
return kv
if __name__ == "__main__":
TubesApp().run()
这是我的 kv 代码:
WindowManager:
MyLayout:
MyLayout2:
<MyLayout>:
name: "main"
free:free
sat:sat
pstd:pstd
tres:tres
pres:pres
tsep:tsep
psep:psep
api:api
sg:sg
pb:pb
co2:co2
h2s:h2s
n2:n2
tds:tds
btn:btn
background_color : 71/255,213/255,223/255,1
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
FloatLayout :
size : root.width,root.height
Label :
text : "PVT Calculator"
font_size : 20
size_hint : (None,None)
size : 400,100
color: 1,1,1,1
pos_hint : {"center_x":0.5,"top" : 1}
background_color : (35/255,135/255,142/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Oil Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.25,"top" : 0.8}
background_color : (71/255,220/255,141/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "API"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0, "top":0.712}
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:api
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.712}
Label :
text : "Saturation pressure"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0, "top":0.672}
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pb
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.672}
Label :
text : "Spesific Gravity"
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0, "top":0.632}
color: 1,1,1,1
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:sg
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.632}
Label :
text : "Non-Hydrocarbon Component"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.75,"top" : 0.8}
background_color : (14/255,195/255,110/225,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "CO2"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.712}
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:co2
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.712}
Label :
text : "H2S"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.672}
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:h2s
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.672}
Label :
text : "N2"
font_size : 12
size_hint : (0.25,0.04)
color: 1,1,1,1
pos_hint : {"x":0.5, "top":0.632}
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:n2
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.75, "top":0.632}
Label :
text : "Reservoir and Separator Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.25,"top" : 0.5}
background_color : (14/255,195/255,110/225,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Reservoir Temperature"
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0, "top":0.41}
color: 1,1,1,1
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tres
multiline:False
font_size : 12
size_hint : (0.25,0.04)
pos_hint : {"x":0.25, "top":0.41}
Label :
text : "Initial Reservoir pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,200
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pres
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,200
Label :
text : "Separator Temperature"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,175
background_color : (8/255,152/255,85/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tsep
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,175
Label :
text : "Separator pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,150
background_color : (9/255,181/255,101/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:psep
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,150
Label :
text : "Standard pressure"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 0,125
background_color : (10/255,209/255,116/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:pstd
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 200,125
Label :
text : "Water Formation Data"
font_size : 20
size_hint : (0.5,0.09)
color: 0.3,0.4,0.5,1
pos_hint : {"center_x":0.75,"top" : 0.5}
background_color : (71/255,220/255,141/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
size_hint : (None,None)
size : 400,125
color: 0.3,0.4,0.5,1
pos: 400,125
background_color : (5/255,95/255,53/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
Label :
text : "Condition"
font_size : 12
size_hint : (None,None)
size : 400,25
color: 1,1,1,1
pos : 400,225
background_color : (6/255,124/255,69/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
ToggleButton :
id:sat
text : "Gas-Saturated Brine"
size_hint : (None,None)
size : 180, 60
pos : 420, 155
group : 'Condition'
ToggleButton :
id:free
text : "Gas-Free Brine"
size_hint : (None,None)
size : 180, 60
pos : 610, 155
group : 'Condition'
state: "normal"
Label :
text : "Total Dissolved Solid"
font_size : 12
size_hint : (None,None)
size : 200,25
color: 1,1,1,1
pos : 400,125
background_color : (10/255,209/255,116/255,1)
canvas.before:
Color :
rgba : self.background_color
Rectangle :
size : self.size
pos : self.pos
TextInput :
id:tds
multiline:False
font_size : 12
size_hint : (None,None)
size : 200,25
pos : 600,125
Button :
id:btn
text : "CALCULATE"
size_hint : (None,None)
size : 180, 60
pos_hint : {"center_x":0.5,"y":0.05}
on_press : root.calculate()
on_release : app.root.current = "second"
<MyLayout2>:
name : "second"
ubah:ubah
GridLayout :
cols : 1
Label :
id:ubah
text : "test"
Button :
text : "Back"
on_press : root.press()
on_release : app.root.current = "main"
我试图在传递给另一个 class 之前打印它,所以它在其中时有值 class 但在更改 class 时为空,谁能帮我解决这个问题我是基维新人
该值为空,因为该函数无法看到当前 运行 class 具有您想要的值。如果您想查看您所做的更改而不是初始值,您需要让 classes 看到彼此。
首先获取您的应用程序 运行,然后转到其屏幕管理器。在那里你可以得到你想要的值的屏幕,然后执行函数。
class MyLayout2(Screen):
def press(self):
running = App.get_running_app()
manager = running.root
layout1 = manager.get_screen('main')
print(layout1.calculate())
# Or just print(App.get_running_app().root.get_screen('main').calculate())