首页 > 编程语言 >8-4 【Python0036】中文级联菜单

8-4 【Python0036】中文级联菜单

时间:2024-06-07 10:33:27浏览次数:16  
标签:province city 级联 district Python0036 self 菜单 combo var

import tkinter as tk

from tkinter import ttk

from pypinyin import lazy_pinyin

# 省份、城市、地区数据

data = {

    "北京": {

        "北京市": ["东城区", "西城区", "朝阳区"],

    },

    "上海": {

        "上海市": ["黄浦区", "静安区", "徐汇区"],

    },

    "广东": {

        "广州市": ["越秀区", "荔湾区", "天河区"],

        "深圳市": ["福田区", "南山区", "罗湖区"],

        "珠海市": ["香洲区", "斗门区", "金湾区"],

    },

    "浙江": {

        "杭州市": ["西湖区", "拱墅区", "下城区"],

        "宁波市": ["海曙区", "江北区", "镇海区"],

        "温州市": ["鹿城区", "龙湾区", "瓯海区"],

    }

}

class ChineseCascadeMenu(tk.Tk):

    def __init__(self):

        super().__init__()

        self.title("中文级联菜单")

        

        self.province_var = tk.StringVar(self)

        self.city_var = tk.StringVar(self)

        self.district_var = tk.StringVar(self)

        

        self.create_widgets()

    def create_widgets(self):

        # 省份级联菜单

        self.province_label = ttk.Label(self, text="选择省份:")

        self.province_label.grid(row=0, column=0, padx=5, pady=5)

        

        self.province_combo = ttk.Combobox(self, textvariable=self.province_var, state="readonly")

        self.province_combo["values"] = list(data.keys())

        self.province_combo.bind("<<ComboboxSelected>>", self.update_cities)

        self.province_combo.grid(row=0, column=1, padx=5, pady=5)

        

        # 城市级联菜单

        self.city_label = ttk.Label(self, text="选择城市:")

        self.city_label.grid(row=1, column=0, padx=5, pady=5)

        

        self.city_combo = ttk.Combobox(self, textvariable=self.city_var, state="readonly")

        self.city_combo.bind("<<ComboboxSelected>>", self.update_districts)

        self.city_combo.grid(row=1, column=1, padx=5, pady=5)

        

        # 地区级联菜单

        self.district_label = ttk.Label(self, text="选择地区:")

        self.district_label.grid(row=2, column=0, padx=5, pady=5)

        

        self.district_combo = ttk.Combobox(self, textvariable=self.district_var, state="readonly")

        self.district_combo.grid(row=2, column=1, padx=5, pady=5)

        

        # 显示选择结果按钮

        self.show_button = ttk.Button(self, text="显示选择结果", command=self.show_selection)

        self.show_button.grid(row=3, columnspan=2, padx=5, pady=5)

        

    def update_cities(self, event):

        province = self.province_var.get()

        cities = list(data.get(province, {}).keys())

        self.city_combo["values"] = cities

        self.city_var.set(cities[0] if cities else "")

        self.update_districts(None)

        

    def update_districts(self, event):

        province = self.province_var.get()

        city = self.city_var.get()

        districts = data.get(province, {}).get(city, [])

        self.district_combo["values"] = districts

        self.district_var.set(districts[0] if districts else "")

        

    def show_selection(self):

        province = self.province_var.get()

        city = self.city_var.get()

        district = self.district_var.get()

        selection_str = f"选择的地区:{province} - {city} - {district}"

        self.selection_label = ttk.Label(self, text=selection_str)

        self.selection_label.grid(row=4, columnspan=2, padx=5, pady=5)

if __name__ == "__main__":

    app = ChineseCascadeMenu()

    app.mainloop()

标签:province,city,级联,district,Python0036,self,菜单,combo,var
From: https://www.cnblogs.com/drip3775/p/18236710

相关文章

  • 使用jQuery实现鼠标移入展开导航的二级菜单栏
    1、首先写出html结构(举个例子)<divclass="nav"><ul><li><ahref="#">全国导航</a><ulclass="nav_meun"><li><ahref=&qu......
  • 前端菜鸡流水账日记 -- checkbox二级菜单滚动条设置
    下午好哇,今天二更咯,这次想说的是一个ElemenuUI中的一个组件--checkbox多选框,管网的地址是https://element.eleme.cn/#/zh-CN/component/installation,关于这个的具体的写法,感兴趣的小伙伴可以去管网看看,很快就能找到的我今天要记录的是关于他的二级菜单当盒子的内容过多时,超......
  • vue 实现路由权限方式2,通过菜单角色,和用户角色是否重合实现匹配过滤权限
    接口数据查看,业务方式查看给角色分配路由权限,然后路由信息上meta就会有哪些角色可以访问的数组。就是说一个路径,哪些角色可以访问,都在meta下的roles里面保存着接着用户角色分配前端代码实现核心代码通过用户信息上用户的角色数组和路由meta上的角色数组是否包含用户角色......
  • Vue3单文件组件实现省市区县三级联动
    Provinces.vue<template>  <divclass="select-container">    <selectv-model="selectedProvince"@change="handleProvinceChange">      <optionvalue=""disabled>请选择省份</opti......
  • JavaScript省市区县选择三级联动实现
    <!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <style>  .select-container{   margin:20pxauto;   width:610px;  }  select{   width:200px;   height:25px;  ......
  • BootStrap入门到实战:BootStrap组件(一)- Glyphicons字体图标、下拉菜单、按钮组、按钮式
    目录 一、Glyphicons字体图标二、下拉菜单1.基本实例1.1示例1.2用jQuery实现1.3菜单向上弹出2.对齐3.标题4.分割线5.禁用的菜单项三、按钮组1.基本实例2.按钮工具栏3.尺寸4.嵌套5.垂直排列6.两端对齐排列的按钮组四、按钮式下拉菜单1.单按......
  • 通过GB/T28181国标协议实现视频监控平台间的级联对接
    随着近几年网络视频监控应用范围的扩大,越来越多的政府部门及跨区域行业单位对视频监控的需求已经不仅仅满足于本地的联网监控,更多正在探索在原有本地联网监控基础上,建设省级乃至全国范围内跨区域的监控联网,全面打造数据共享平台。Liveweb视频融合云平台具备视频监控直播、云端......
  • Day04 左侧菜单导航实现
    一.点击左侧菜单导航到对应的View页面1.首先在MyToDo项目中,创建出左侧菜单所有的View(视图)及对应的ViewModel(视图逻辑处理类)ViewViewModel首页IndexViewIndexViewModel待办事项ToDoViewToDoViewModel忘备录MemoViewMemoViewModel设置SettingsVi......
  • 制作可以用来控制vsftpd服务的菜单
    1:创建菜单函数文件#vimmenu#创建文件x=1#高亮行号,默认为1即可y=0#第几行menu(){#循环显示菜单的函数clearforiin1,安装ftp服务2,开关ftp服务3,退出......
  • 如何使用 CSS 在鼠标悬停时显示和隐藏下拉菜单
    答案:使用CSS :hover 伪类如果您只想在鼠标悬停时显示和隐藏下拉菜单,则不需要任何JavaScript。您可以简单地使用CSS display 属性和 :hover pseudo-class 来做到这一点。以下示例将向您展示如何使用CSS实现简单的下拉菜单。示例<!DOCTYPEhtml><htmllang="......