Задать вопрос
@Vasya_Aleksandrow

Как получить текст из под маркера tkintermapwidget при его нажатии?

У меня есть класс, который выполняет функцию открытия нового окна верхнего уровня 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>
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы