Интерактивная карта КивиPython

Программы на Python
Ответить
Anonymous
 Интерактивная карта Киви

Сообщение Anonymous »

Я пытаюсь создать интерактивную и редактируемую карту, используя kivy в Python. Однако мне не нужна типичная карта с использованием сада киви и представления карты. Я хотел бы получить черно-белую карту, которая, когда вы вводите название страны в поле ввода, окрашивается в синий цвет.
Лучшее, что мне удалось получить, это черная карта с белыми рамками, и при вводе название страны отображается синим цветом.

Код: Выделить всё

import folium
import tkinter as tk
from tkinter import ttk
import webbrowser
import os

class WorldMapApp:
def __init__(self):
self.visited_countries = []

# Create window
self.root = tk.Tk()
self.root.title("World Travel Map")

# Create GUI elements
frame = ttk.Frame(self.root, padding="10")
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))

# Country entry
ttk.Label(frame, text="Enter country name:").grid(row=0, column=0, sticky=tk.W)
self.country_entry = ttk.Entry(frame, width=30)
self.country_entry.grid(row=0, column=1, padx=5)

# Add button
ttk.Button(frame, text="Add Country", command=self.add_country).grid(row=0, column=2, padx=5)

# View map button
ttk.Button(frame, text="View Map", command=self.show_map).grid(row=0, column=3, padx=5)

# Create initial map
self.update_map()

def update_map(self):
# Create map
m = folium.Map(location=[20, 0], zoom_start=2, tiles='CartoDB dark_matter')

# Add country polygons
folium.GeoJson(
'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data/world-countries.json',
style_function=lambda country: {
'fillColor': 'blue' if country['properties']['name'] in self.visited_countries else 'black',
'fillOpacity': 0.7,
'color': 'white',
'weight': 1
}
).add_to(m)

# Save map
self.map_path = 'world_map.html'
m.save(self.map_path)

def add_country(self):
country = self.country_entry.get().strip()
if country:
self.visited_countries.append(country)
self.country_entry.delete(0, tk.END)
self.update_map()
self.show_map()

def show_map(self):
webbrowser.open('file://' + os.path.abspath(self.map_path))

def run(self):
self.root.mainloop()

if __name__ == "__main__":
app = WorldMapApp()
app.run()
Это HTML-карта, которая открывается в новом окне. У меня вопрос: можно ли добавить такую ​​карту с меньшими размерами в код, в котором уже есть несколько полей, и вставить туда?
Код, который я хотел бы реализовать его вот здесь.

Код: Выделить всё

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.metrics import dp
from kivy.graphics import Color, RoundedRectangle

class Dashboard(BoxLayout):
pass

class DashboardApp(App):
def build(self):
Builder.load_string(KV)
return Dashboard()

KV = '''
#:import dp kivy.metrics.dp

:
orientation: 'vertical'
padding: dp(10)
spacing: dp(5)

ScrollView:
do_scroll_x: False
do_scroll_y: True
bar_width: '10dp'
bar_color: 0.22, 0.71, 1, 1
bar_inactive_color: 0.22, 0.71, 1, 0.5
effect_cls: "ScrollEffect"
scroll_type: ['content', 'bars']

BoxLayout:
orientation: 'vertical'
size_hint_y: None
height: dp(700)
spacing: dp(10)
padding: dp(15)

canvas.before:
Color:
rgba: 0.66, 0.85, 0.96, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [dp(15)]

# First box
BoxLayout:
size_hint_y: None
height: dp(160)
canvas.before:
Color:
rgba: 0.22, 0.71, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [dp(15)]
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos[0] + dp(2), self.pos[1] + dp(2)
size: self.size[0] - dp(4), self.size[1] - dp(4)
radius: [dp(13)]

# Second box
BoxLayout:
size_hint_y: None
height: dp(150)
canvas.before:
Color:
rgba: 0.22, 0.71, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [dp(15)]
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos[0] + dp(2), self.pos[1] + dp(2)
size: self.size[0] - dp(4), self.size[1] - dp(4)
radius: [dp(13)]

# Third box
BoxLayout:
size_hint_y: None
height: dp(180)
canvas.before:
Color:
rgba: 0.22, 0.71, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [dp(15)]
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos[0] + dp(2), self.pos[1] + dp(2)
size: self.size[0] - dp(4), self.size[1] - dp(4)
radius: [dp(13)]

# Fourth box
BoxLayout:
size_hint_y: None
height: dp(150)
canvas.before:
Color:
rgba: 0.22, 0.71, 1, 1
RoundedRectangle:
pos: self.pos
size: self.size
radius: [dp(15)]
Color:
rgba: 1, 1, 1, 1
RoundedRectangle:
pos: self.pos[0] + dp(2), self.pos[1] + dp(2)
size: self.size[0] - dp(4), self.size[1] - dp(4)
radius: [dp(13)]
'''

if __name__ == '__main__':
DashboardApp().run()
Заранее спасибо за вашу поддержку и ответы,
Сильвия

Подробнее здесь: https://stackoverflow.com/questions/793 ... ap-in-kivy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»