У меня есть класс, который выполняет функцию открытия нового окна верхнего уровня Tkinter в виде гугл-карты с метками, которые подгружаются из файла csv в виде координат row[0] и row[1]. Также в файл записываются значения улицы и дома для дальнейшего использования в программе. Итого одна строка файла csv выглядит следующим образом: 52.51652915460641,13.38211370087592,Street,100. Значений в файле ~1000, и при запуске происходит заполнение карты метками. Поскольку метки выставляются при помощи цикла, то при нажатии на маркер (есесна) открывается одно и тоже последнее значение цикла. Можно ли сделать как то так, чтобы всё работало нормально? Bind, lambda и т.п. уже пробовали.
Вот мой код:
from tkinter import *
import tkintermapview
import tkinter as root
from tkinter import ttk
import csv
marker_list = []
class Main_open_map(root.Tk):
def __init__(self):
super().__init__()
self.title("Все метки")
self.geometry("1024x768+805+1")
self.map_widget = tkintermapview.TkinterMapView(self, width=1280, height=1024)
self.button_1 = ttk.Button(self, text="Установить маркер", command=self.set_marker_event)
self.button_1.pack(padx=5, pady=5)
with open('2.csv', 'r') as file:
file_reader = csv.reader(file)
for row in file_reader:
try:
self.markers = tkintermapview.TkinterMapView(self)
self.markers = self.map_widget.set_marker(float(row[0]), float(row[1]),
command=self.click_marker)
self.markers.set_text(f'{row[2],row[3]}')
print(row[0], row[1])
except ValueError:
pass
self.map_widget.set_tile_server("https://mt0.google.com/vt/lyrs=m&hl=en&x={x}&y={y}&z={z}&s=Ga",
max_zoom=22)
self.map_widget.pack(padx=5, pady=5)
def click_marker(self, event=None):
pass
def set_marker_event(self):
global current_position
current_position = self.map_widget.get_position()
marker_list.append(self.map_widget.set_marker(current_position[0], current_position[1]))
Save_info_street()
class Save_info_street(root.Toplevel):
def __init__(self, event=None):
super().__init__()
self.title("Добавление метки")
self.geometry("300x200+750+300")
self.label_take_adress = Label(self, text='Введите адрес для привязки метки:')
self.label_take_adress.pack(padx=5, pady=5)
self.entry_take_adress = Entry(self)
self.entry_take_adress.pack(padx=5, pady=5)
self.entry_take_house_number = Entry(self)
self.entry_take_house_number.pack(padx=5, pady=5)
self.button_save_marker_position = ttk.Button(self, text='Привязать',
command=self.save_marker_position)
self.button_save_marker_position.pack(padx=5, pady=5)
def save_marker_position(self):
global adress, house_number, current_position
adress = self.entry_take_adress.get()
house_number = self.entry_take_house_number.get()
with open('2.csv', 'a', newline='\n') as file:
fieldnames = ['coor_x', 'coor_y', 'adress', 'house_number']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'coor_x': current_position[0], 'coor_y': current_position[1],
'adress': adress, 'house_number': house_number})
file.close()
def main():
root = Main_open_map()
root.geometry("1024x768+400+100")
root.mainloop()
if __name__ == "__main__":
main()
<code>