簡體   English   中英

for循環中的ipyleaflet on_click事件在每次迭代中調用function

[英]ipyleaflet on_click event in for loop calls function on each iteration

我一直在 map 上繪制標記,每個標記都有自己的位置和樣本 ID。 我正在嘗試在每個標記上添加一個 click_event,以便每個標記在被單擊時打印出其樣本 ID。 我的主要問題是 on_click 事件,它似乎在我點擊標記之前每次迭代都會調用 button_click function。

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

Output: 在此處輸入圖像描述

我注意到的一件奇怪的事情是,如果我將 on_click 事件設置為調用沒有參數的 function(在這種情況下為簡單的“hello world”function),它可以正常工作,但是,我需要來自 for 循環中的參數,

一種可能的解決方案是創建一個返回適當 function 的 function:

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

然后您可以將此返回的 function 傳遞給標記 on_click 事件:

new_marker.on_click(create_button_click(val))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM