from kivy.graphics.context_instructions import Color
from kivy.graphics.instructions import InstructionGroup
from kivy.graphics.vertex_instructions import Line
from kivy.properties import ObjectProperty
from kivy_garden.mapview import MapView, MapMarker
from kivy.app import App
from kivy.lang import Builder
kv = '''
MyMapView:
zoom: 2
double_tap_zoom: True
id: gps
Button:
text: " [86-6] "
background_color: (1,1,1,1)
color: (0,0,0,1)
font_size: 15
size_hint: (None,None)
width: 150
height: 30
on_press: root.gpss()
'''
class MyMapView(MapView):
grp = ObjectProperty(None)
def gpss(self):
self.ids.gps.lat = 48.20753856396109
self.ids.gps.lon = 16.372519189874197
class MapViewApp(App):
def build(self):
return Builder.load_string(kv)
MapViewApp().run()
Error
self.ids.gps.lat = 48.20753856396109
File "kivyproperties.pyx", line 864, in kivy.properties.ObservableDict.__getattr__
AttributeError: 'super' object has no attribute '__getattr__'
[Finished in 5.0s with exit code 1]
问题是您使用的ids
。kivy对象的ids
是根下小部件树中对象的字典。但是您在kv
中分配的唯一id
是为根节点本身分配的。因此,实际上没有ids
被添加到ids
字典中。这就是导致错误消息的原因(ids
字典为空)。但是,由于gpss()
是MyMapView
对象的方法,因此不需要使用ids
来获取对它的引用,它就是self
。所以你的gpss()
方法可以改为:
def gpss(self):
self.lat = 48.20753856396109
self.lon = 16.372519189874197
self.zoom = 20
您可能需要添加zoom
设置之类的东西以使MapView
响应