Skip to main content

A simple tkinter map widget

Project description

tkmap

A Tkinter-based interactive map widget for Python, supporting OpenStreetMap and custom tile sources. Easily embed a map in your Tkinter GUI, handle user interaction, and respond to map events.

Features

  • Fast, smooth map panning and zooming
  • Customizable tile sources (e.g., OpenStreetMap)
  • Mouse and viewport event handling
  • Simple integration with Tkinter applications

Installation

Install via pip (after cloning or when available on PyPI):

pip install tkmap

Minimal Example

This example launches a Tkinter window with an interactive OpenStreetMap viewer:

import tkinter as tk
from pathlib import Path
import requests
from platformdirs import user_cache_dir
from tkmap import LonLat, MapWidget
from tkmap.tileloaders.default import DefaultTileLoader

def main():
    tile_loader = DefaultTileLoader(
        url="https://tile.openstreetmap.org/{z}/{x}/{y}.png",
        base_cache_dir=Path(user_cache_dir("tkmap")) / "tile_cache",
        requests_session=requests.Session(),
    )
    root = tk.Tk()
    root.geometry("800x600")
    root.title("tkmap OpenStreetMap Demo")
    map_widget = MapWidget(
        root,
        center=LonLat(0, 0),
        zoom=2,
        tile_loader=tile_loader,
    )
    map_widget.pack(fill="both", expand=True)
    tile_loader.start_remote_fetch_queue_processing(root.winfo_toplevel(), interval_ms=100)
    root.mainloop()

if __name__ == "__main__":
    main()

Handling Events

You can respond to mouse movement and viewport changes using event callbacks:

from tkmap.events import MouseMovedEvent, ViewportChangeEvent

# ... (setup code as above)

def on_mouse_moved(event: MouseMovedEvent):
    print(f"Mouse at lat={event.lonlat.lat:.6f}, lon={event.lonlat.lon:.6f}")

def on_viewport_changed(event: ViewportChangeEvent):
    print(f"Viewport center: {event.center.lat:.6f}, {event.center.lon:.6f}, zoom={event.zoom}")

map_widget.on_mouse_moved(on_mouse_moved)
map_widget.on_viewport_change(on_viewport_changed)

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tkmap-0.1.2.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tkmap-0.1.2-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file tkmap-0.1.2.tar.gz.

File metadata

  • Download URL: tkmap-0.1.2.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.11.0-1015-azure

File hashes

Hashes for tkmap-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7fbca6544dbc5e577c2c65d5c35879cdd1ace5f95286652600ad488f7b8b475f
MD5 01acbb8fb8f5d0b698e96ea14dc72d3a
BLAKE2b-256 9ba54b65a7a511dd1e02e9d7042a1c7b0b273fb05f3391d285d294b769be5e10

See more details on using hashes here.

File details

Details for the file tkmap-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: tkmap-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.13.3 Linux/6.11.0-1015-azure

File hashes

Hashes for tkmap-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f9ff6f42062057bea5e3d119b6603de2ee3870cd884a24d8f2187e0068f0bbdd
MD5 528c37dabd8a4813cbfee486d79faf1d
BLAKE2b-256 08ecfb9ea23cdfdebf26291235679634c4feb144dfdfd116a311fe934fc48fd2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page