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:区分按下的按钮的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - 按下后更改按钮的颜色?

按下时将动态创建的按钮信息传递给函数。 kivymd, kivy, 蟒蛇

如何通过按下按钮 kivy/kivymd/python 在另一个窗口中创建按钮

kivy 按钮按下以转到多个屏幕之一

在 Kivy for Python 中按下按钮时更新标签的文本

在 Kivy for Python 中按下按钮时更新标签的文本