很抱歉这个菜鸟问题,即时通讯仍在学习中,我很少找到有关mapview模块的文档。
因此,对于一个屏幕页面,我有以下内容:
class Mapspage(Screen):
def __init__(self, **kwargs):
self.aboutname="hi"
super(Mapspage, self).__init__(**kwargs)
gl = GridLayout(cols=1)
mapview = MapView(zoom=12, lat=55.6712674, lon=12.5938239)
self.buttons=[]
self.nums=range(0,len(df["name_en"]))
for i in self.nums:
name=list(df["name_en"])[i]
marker = MapMarkerPopup(lat=list(df["latitude"])[i], lon=list(df["longitude"])[i])
self.buttons.append(button(text=list(df["name_en"])[i],on_press=partial(self.pressbutton,num=self.nums[i]),size=(len((df["name_en"])[i])*7*1.05,15),size_hint=(None,None)))
marker.add_widget(self.buttons[i])
mapview.add_marker(marker)
gl.add_widget(mapview)
self.add_widget(gl)
def pressbutton(self,num, *args):
global aboutname
aboutname=(df["name_en"])[num]
chatapp.screenmanager.current = "About"
我在哪里用from functools import partial
。我的方法存在问题,尽管我确保按钮存储在不同的变量中(self.buttons列表的元素),甚至确保它们自身的数字存储在单独的列表中,但我无法传递该数字变量,用于区分按钮按钮功能(单击地图点时出现)。当我进行尝试时,我会收到错误,TypeError: pressbutton() got multiple values for argument 'num'
我认为所有按钮都传递给它们的num变量。
问题在于pressbutton()
方法的定义及其对关键字参数的处理。您可以通过以下方式处理关键字pressbutton()
:
def pressbutton(self, button_instance, num=99):
它定义num
为关键字参数并提供默认值。
另一种选择是这样的:
def pressbutton(self, button_instance, **kwargs):
num = kwargs.pop('num', 99)
做同样的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句