forked from TomSchimansky/TkinterMapView
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmap_with_customtkinter.py
More file actions
123 lines (90 loc) · 5.36 KB
/
map_with_customtkinter.py
File metadata and controls
123 lines (90 loc) · 5.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import customtkinter
from tkintermapview import TkinterMapView
customtkinter.set_default_color_theme("blue")
class App(customtkinter.CTk):
APP_NAME = "TkinterMapView with CustomTkinter"
WIDTH = 800
HEIGHT = 500
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.title(App.APP_NAME)
self.geometry(str(App.WIDTH) + "x" + str(App.HEIGHT))
self.minsize(App.WIDTH, App.HEIGHT)
self.protocol("WM_DELETE_WINDOW", self.on_closing)
self.bind("<Command-q>", self.on_closing)
self.bind("<Command-w>", self.on_closing)
self.createcommand('tk::mac::Quit', self.on_closing)
self.marker_list = []
# ============ create two CTkFrames ============
self.grid_columnconfigure(0, weight=0)
self.grid_columnconfigure(1, weight=1)
self.grid_rowconfigure(0, weight=1)
self.frame_left = customtkinter.CTkFrame(master=self, width=150, corner_radius=0, fg_color=None)
self.frame_left.grid(row=0, column=0, padx=0, pady=0, sticky="nsew")
self.frame_right = customtkinter.CTkFrame(master=self, corner_radius=0)
self.frame_right.grid(row=0, column=1, rowspan=1, pady=0, padx=0, sticky="nsew")
# ============ frame_left ============
self.frame_left.grid_rowconfigure(2, weight=1)
self.button_1 = customtkinter.CTkButton(master=self.frame_left,
text="Set Marker",
command=self.set_marker_event)
self.button_1.grid(pady=(20, 0), padx=(20, 20), row=0, column=0)
self.button_2 = customtkinter.CTkButton(master=self.frame_left,
text="Clear Markers",
command=self.clear_marker_event)
self.button_2.grid(pady=(20, 0), padx=(20, 20), row=1, column=0)
self.map_label = customtkinter.CTkLabel(self.frame_left, text="Tile Server:", anchor="w")
self.map_label.grid(row=3, column=0, padx=(20, 20), pady=(20, 0))
self.map_option_menu = customtkinter.CTkOptionMenu(self.frame_left, values=["OpenStreetMap", "Google normal", "Google satellite"],
command=self.change_map)
self.map_option_menu.grid(row=4, column=0, padx=(20, 20), pady=(10, 0))
self.appearance_mode_label = customtkinter.CTkLabel(self.frame_left, text="Appearance Mode:", anchor="w")
self.appearance_mode_label.grid(row=5, column=0, padx=(20, 20), pady=(20, 0))
self.appearance_mode_optionemenu = customtkinter.CTkOptionMenu(self.frame_left, values=["Light", "Dark", "System"],
command=self.change_appearance_mode)
self.appearance_mode_optionemenu.grid(row=6, column=0, padx=(20, 20), pady=(10, 20))
# ============ frame_right ============
self.frame_right.grid_rowconfigure(1, weight=1)
self.frame_right.grid_rowconfigure(0, weight=0)
self.frame_right.grid_columnconfigure(0, weight=1)
self.frame_right.grid_columnconfigure(1, weight=0)
self.frame_right.grid_columnconfigure(2, weight=1)
self.map_widget = TkinterMapView(self.frame_right, corner_radius=0)
self.map_widget.grid(row=1, rowspan=1, column=0, columnspan=3, sticky="nswe", padx=(0, 0), pady=(0, 0))
self.entry = customtkinter.CTkEntry(master=self.frame_right,
placeholder_text="type address")
self.entry.grid(row=0, column=0, sticky="we", padx=(12, 0), pady=12)
self.entry.bind("<Return>", self.search_event)
self.button_5 = customtkinter.CTkButton(master=self.frame_right,
text="Search",
width=90,
command=self.search_event)
self.button_5.grid(row=0, column=1, sticky="w", padx=(12, 0), pady=12)
# Set default values
self.map_widget.set_address("Berlin")
self.map_option_menu.set("OpenStreetMap")
self.appearance_mode_optionemenu.set("Dark")
def search_event(self, event=None):
self.map_widget.set_address(self.entry.get())
def set_marker_event(self):
current_position = self.map_widget.get_position()
self.marker_list.append(self.map_widget.set_marker(current_position[0], current_position[1]))
def clear_marker_event(self):
for marker in self.marker_list:
marker.delete()
def change_appearance_mode(self, new_appearance_mode: str):
customtkinter.set_appearance_mode(new_appearance_mode)
def change_map(self, new_map: str):
if new_map == "OpenStreetMap":
self.map_widget.set_tile_server("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png")
elif new_map == "Google normal":
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)
elif new_map == "Google satellite":
self.map_widget.set_tile_server("https://mt0.google.com/vt/lyrs=s&hl=en&x={x}&y={y}&z={z}&s=Ga", max_zoom=22)
def on_closing(self, event=0):
self.destroy()
def start(self):
self.mainloop()
if __name__ == "__main__":
app = App()
app.start()