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 "kivy\properties.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()
方法可以更改为:您可能需要添加类似
zoom
设置的内容,以使MapView
响应相关问题 更多 >
编程相关推荐