Kivy Mapview:区分按下的按钮
Posted
技术标签:
【中文标题】Kivy Mapview:区分按下的按钮【英文标题】:Kivy Mapview: distinguish buttons pressed 【发布时间】:2020-11-16 17:58:05 【问题描述】:抱歉这个菜鸟问题,我还在学习,我发现 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 列表的元素)中,甚至确保它们自己的数字存储在单独的列表中,但我无法传递数字变量,用于区分按钮(单击地图点时出现的按钮)到 pressbutton 功能。当我运行我的尝试时,我收到了错误,TypeError: pressbutton() got multiple values for argument 'num'
我认为所有按钮都传递了它们的 num 变量。
【问题讨论】:
【参考方案1】:问题在于pressbutton()
方法的定义及其对关键字参数的处理。您可以通过将pressbutton()
定义为:
def pressbutton(self, button_instance, num=99):
将num
定义为关键字参数并提供默认值。
另一个选项是这样的:
def pressbutton(self, button_instance, **kwargs):
num = kwargs.pop('num', 99)
做同样的事情。
【讨论】:
以上是关于Kivy Mapview:区分按下的按钮的主要内容,如果未能解决你的问题,请参考以下文章
按下时将动态创建的按钮信息传递给函数。 kivymd, kivy, 蟒蛇
如何通过按下按钮 kivy/kivymd/python 在另一个窗口中创建按钮