这里写目录标题
Python小Demo:Tkinter制作足迹地图
环境
需要Tkinter与百度开源的pyecharts
安装方法:
pyecharts安装
pip install pyecharts
# 地图bao
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
pip install echarts-china-counties-pypkg
pip install echarts-china-misc-pypkg
功能
- 制作具有下拉列表的界面展示中国城市列表,共343座城市
- 点击OK按钮生成足迹地图,自动打开浏览器查看足迹地图
- 每8个城市换行
代码
import tkinter as tk
import tkinter.messagebox
from tkinter import ttk
import json
import re
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.options import InitOpts
import os
import webbrowser
# 读取province_cities.json
province_cities = json.load(open("./province_cities.json", "r", encoding="utf-8"))
# 主界面
root = tk.Tk()
root.title("City Map")
root.geometry("600x600")
# 初始化一个空的city_selection
city_selection = dict()
all_cities = []
# 闭包
def make_tracer(city):
return lambda *args: on_checkbutton_toggled(city)
for province in province_cities:
for city in province_cities[province]:
var = tk.IntVar()
var.trace_add("write", make_tracer(city))
city_selection[city] = var
all_cities.append(city)
print(len(all_cities))
"""
整体布局
"""
# 画布Canvas
canvas = tk.Canvas(root, bg="lightblue", highlightthickness=0)
canvas.pack(side="left", fill="both", expand=True)
# 框架Frame,放置在Canvas上
frame = tk.Frame(canvas, bg="white")
canvas_frame = canvas.create_window((0, 0), window=frame, anchor="nw")
# 垂直滚动条
scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview)
scrollbar.pack(side="right", fill="y")
# 绑定
canvas.configure(yscrollcommand=scrollbar.set)
def on_checkbutton_toggled(city_name):
if city_selection[city_name].get() == 1:
print(f"{
city_name} 被选中")
else:
print(f"{
city_name} 被取消选中")
# 调整显示的文字
def adjust_city_text(city_name: str):
suffixes = ["市", "地区", "盟", "特别行政区"]
# 正则替代
for suffix in suffixes:
city_name = re.sub(rf"{
suffix}$", '', city_name)
# 30个自治州
autonomous_prefectures = [
"延边", "恩施", "湘西", "阿坝", "甘孜", "凉山", "黔东南", "黔南", "黔西南", "楚雄",
"红河", "文山", "西双版纳", "大理", "德宏", "怒江", "迪庆", "临夏", "甘南", "海南",
"海北", "