我想通过按下按钮更改Kivy Mapview的位置,但收到错误消息

2024-09-28 22:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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]

Tags: fromimportselfnoneappidsbuilderproperties
1条回答
网友
1楼 · 发布于 2024-09-28 22:25:56

问题在于你对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响应

相关问题 更多 >