.kv和python代码中的变量不同步
当我尝试从python代码中访问id为total_area的TextInput时,会出现以下错误:AttributeError:'kivy.properties.ObjectProperty'对象没有属性'text'。我使用调试器来查看错误,在我看来,python代码中的变量并没有链接到kv文件中的变量。帮助 Python代码:.kv和python代码中的变量不同步,python,kivy,desktop-application,kivy-language,Python,Kivy,Desktop Application,Kivy Language,当我尝试从python代码中访问id为total_area的TextInput时,会出现以下错误:AttributeError:'kivy.properties.ObjectProperty'对象没有属性'text'。我使用调试器来查看错误,在我看来,python代码中的变量并没有链接到kv文件中的变量。帮助 Python代码: class RootWidget(Widget): Config.set('graphics', 'resizable', '0') Config.s
class RootWidget(Widget):
Config.set('graphics', 'resizable', '0')
Config.set('graphics', 'height', '720')
Config.set('graphics', 'width', '480')
koatuu_obl_cent = ObjectProperty()
koatuu_city = ObjectProperty()
kitchen_area = ObjectProperty()
qt_room = ObjectProperty()
floor = ObjectProperty()
qt_floor = ObjectProperty()
total_area = ObjectProperty()
living_area = ObjectProperty()
year_building = ObjectProperty()
@classmethod
def button_OnPress(self):
print(self.total_area.text)
class DeepEval(App):
def build(self):
return RootWidget()
if __name__ == '__main__':
DeepEval().run()
.kv:
#:导入工厂kivy.Factory.Factory
:
自动解除:错误
大小提示:无,无
尺码:400400
koatuu_obl_cent:koatuu_obl_cent
库图尤市:库图尤市
厨房区域:厨房区域
qt_房间:qt_房间
楼层:楼层
qt_层:qt_层
总面积:总面积
生活区:生活区
年份建筑:年份建筑
图片:
资料来源:“imgs/background.jpg”
大小:self.texture\u大小
主持人安排:
主播:中锋
主播:“中心”
尺寸:根.宽度,根.高度
盒子布局:
方向:“垂直”
身高:350
宽度:225
大小提示:无
尺寸提示:无
间距:22.5
文本输入:
id:总面积
多行:False
提示文字:“参数12”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:厨房区
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:居住区
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:qt_房间
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:楼层
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:qt_层
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
文本输入:
id:year_大厦
多行:False
提示文字:“参数1”
哈利恩:“中心”
前景色:.5.5.5.75
身高:33
宽度:225
大小提示:无
尺寸提示:无
按钮:
id:koatuu_obl_cent
文本:“打开弹出窗口”
发布时:Factory.MyPopup().open()
身高:33
宽度:225
大小提示:无
尺寸提示:无
按钮:
id:koatuu_市
文本:“打开弹出窗口”
发布时:Factory.MyPopup().open()
身高:33
宽度:225
大小提示:无
尺寸提示:无
主持人安排:
主播x:“中心”
主播:“底部”
填充:0,0,0,25
按钮:
正文:“计算”
大小提示:无
尺寸提示:无
身高:50
宽度:135
on_press:root.button_OnPress()
主持人安排:
主持人:对
主播:“底部”
按钮:
文本:“cam”
大小提示:无
尺寸提示:无
身高:45
宽度:45
您编写了@classmethod,因此得到了一个class方法,它的第一个参数不是类的实例(通常称为self
),而是类本身(通常称为cls
)
因此,您的self.total_area
相当于RootWidget.total_area
,正如错误所说,这是一个ObjectProperty
您需要将total_区域作为类实例的属性进行访问。在本例中,删除执行此操作的
@classmethod
。谢谢!
#:import Factory kivy.factory.Factory
<MyPopup@Popup>:
auto_dismiss: False
size_hint: None, None
size: 400, 400
<RootWidget>
koatuu_obl_cent: koatuu_obl_cent
koatuu_city: koatuu_city
kitchen_area: kitchen_area
qt_room: qt_room
floor: floor
qt_floor: qt_floor
total_area: total_area
living_area: living_area
year_building: year_building
Image:
source: 'imgs/background.jpg'
size: self.texture_size
AnchorLayout:
anchor_x: 'center'
anchor_y: 'center'
size: root.width, root.height
BoxLayout:
orientation: 'vertical'
height: 350
width: 225
size_hint_x: None
size_hint_y: None
spacing: 22.5
TextInput:
id: total_area
multiline: False
hint_text: "Param12"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: kitchen_area
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: living_area
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: qt_room
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: floor
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: qt_floor
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
TextInput:
id: year_building
multiline: False
hint_text: "Param1"
halign: 'center'
foreground_color: .5, .5, .5, .75
height: 33
width: 225
size_hint_x: None
size_hint_y: None
Button:
id: koatuu_obl_cent
text: 'Open popup'
on_release: Factory.MyPopup().open()
height: 33
width: 225
size_hint_x: None
size_hint_y: None
Button:
id: koatuu_city
text: 'Open popup'
on_release: Factory.MyPopup().open()
height: 33
width: 225
size_hint_x: None
size_hint_y: None
AnchorLayout:
anchor_x: "center"
anchor_y: "bottom"
padding: 0,0,0,25
Button:
text: "Calculate"
size_hint_x: None
size_hint_y: None
height: 50
width: 135
on_press: root.button_OnPress()
AnchorLayout:
anchor_x: "right"
anchor_y: "bottom"
Button:
text: "cam"
size_hint_x: None
size_hint_y: None
height: 45
width: 45
@classmethod
def button_OnPress(self):
print(self.total_area.text)