我在一个闪亮的模块上写了一个循环,在传单地图上显示标记。但是,在我所有的地图上都显示了相同的标记(我想在不同的地图上显示import tkinter as tk
class DATA:
""" Data container """
list_x = []
list_y = []
class EntryTable(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
""" Code creating frames, buttons, etc """
""" Code adding something to DATA.list_x, DATA.list_y """
DATA.list_x = [1, 2, 3]
DATA.list_y = [4, 5, 6]
class PlotWin(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
""" Code creating frames, buttons, etc """
""" Code doing something with DATA.list_x, DATA.list_y """
print('plot:{}'.format((DATA.list_x, DATA.list_y)))
class App(tk.Tk):
def __init__(self):
super().__init__()
""" Code adding main window widgets and toolbar """
""" Code adding Toplevel window's """
entryTable = EntryTable(self)
plotWin = PlotWin(self)
if __name__ == '__main__':
App().mainloop()
中的每对坐标)。我不知道为什么,但是数据子集似乎失败了。谁能解释为什么会这样以及如何解决呢?
data.frame
答案 0 :(得分:0)
不能100%知道为什么,但是如果您使用callModule命令并将其从观察部分中取出并使用lapply代替for循环,则它似乎可以工作。
library(shiny)
library(leaflet)
Data <- data.frame(longitude = c(11, 12, 14), latitude = c(50, 49, 51))
mod_map_ui <- function(.id) {
ns <- shiny::NS(.id)
leafletOutput(ns("map"))
}
mod_map <- function(input, output, session, .Data) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addMarkers(data = .Data)
})
}
ui <- fluidPage(
uiOutput("list")
)
server <- function(input, output, session) {
observe({
tag.list <- tagList()
for (i in seq_len(NROW(Data))) {
tag.list <- tagAppendChildren(
tag.list,
mod_map_ui(paste0("map_mod", i)), br()
)
}
output$list <- renderUI({
tag.list
})
})
#####
lapply(seq_len(NROW(Data)), function(i){
callModule(mod_map, paste0("map_mod", i), .Data = Data[i, ])
})
#####
}
shinyApp(ui, server)