【问题标题】:ipyleaflet on_click event in for loop calls function on each iteration每次迭代时for循环调用函数中的ipyleaflet on_click事件
【发布时间】:2021-05-27 08:38:07
【问题描述】:

我一直在地图上绘制标记,每个标记都有自己的位置和样本 ID。我正在尝试在每个标记上添加一个 click_event,以便每个标记在被单击时打印出其样本 ID。我的主要问题是 on_click 事件,它似乎在每次迭代之前调用 button_click 函数,然后我什至可以点击标记。

capitol_loc = (38.89, -77.02) #(lat, long)
m = Map(center=(capitol_loc), zoom=14)
locations = [(38.89, -77.02), (38.88, -77.02), (38.88, -77.01), (38.873, -77.02), (38.891, -77.02), (38.89, -77.022)]

def button_click(sample_id):
    print(str(sample_id))


for i in range(len(locations)):
    new_marker_loc = (locations[i][0], locations[i][1])
    new_marker = Marker(location=new_marker_loc, draggable=False)
    
    sample_id = "Sample Id: 1234567"
    
    new_marker.on_click(button_click(sample_id)) 
    m.add_layer(new_marker)
    
m  #Display map

输出:

我注意到的一件奇怪的事情是,如果我将 on_click 事件设置为调用不带参数的函数(在本例中为简单的“hello world”函数),它可以正常工作,但是,我需要一个来自 for 的参数循环,

【问题讨论】:

    标签: python python-3.x ipyleaflet


    【解决方案1】:

    一种可能的解决方案是创建一个返回适当函数的函数:

    def create_button_click(val):
        def button_click():
            print(val)
        
        return button_click
    

    然后你可以将这个返回的函数传递给标记 on_click 事件:

    new_marker.on_click(create_button_click(val))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2018-02-13
      • 2021-02-15
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      相关资源
      最近更新 更多