(1)对所有的快递按照在list中的位置进行编号,以便按照编号查看快递,以及按照要求查看快递的编号;将编号以后的内容存放到一个excel表格中,要求表格各列的列名分别为“编号”,“省(直辖市/自治区)”,“具体地址”,“姓名”其内容如名; (2)在图形窗口放置“直方图”,“省->编号” “编号->省”三个按钮; (3)当点击直方图按钮时,在图形窗口显示各省的快递量的直方图,以便按省分配运力; (4)当点击“省->编号”按钮时,使用多线程方法在命令窗口或者控制台提示“请输入省份:”并等待输入,当输入某个省的

时间: 2024-04-02 22:35:46 浏览: 18
好的,这是一个更复杂的需求,需要使用到更多的Python库和技术,包括matplotlib、tkinter和多线程编程。下面是一个实现这个需求的代码示例: ```python import openpyxl import matplotlib.pyplot as plt import threading import tkinter as tk from tkinter import messagebox # 读取Excel表格中的数据,返回一个包含所有快递信息的列表 def read_excel(filename): workbook = openpyxl.load_workbook(filename) worksheet = workbook.active headers = [cell.value for cell in worksheet[1]] data = [] for row in worksheet.iter_rows(min_row=2, values_only=True): item = dict(zip(headers, row)) data.append(item) return data # 将快递列表按照省份统计数量,并返回一个包含各省份快递数量的字典 def count_by_province(express_list): count_dict = {} for item in express_list: province = item['province'] if province in count_dict: count_dict[province] += 1 else: count_dict[province] = 1 return count_dict # 在图形窗口中显示各省份快递数量的直方图 def show_histogram(express_list): count_dict = count_by_province(express_list) provinces = list(count_dict.keys()) counts = list(count_dict.values()) plt.bar(provinces, counts) plt.title('Express Count by Province') plt.xlabel('Province') plt.ylabel('Count') plt.show() # 根据省份查找快递编号,返回一个包含符合条件的快递编号的列表 def search_by_province(express_list, province): result = [] for i, item in enumerate(express_list): if item['province'] == province: result.append(i+1) return result # 根据快递编号查找省份,返回一个包含符合条件的省份的列表 def search_by_id(express_list, id): if id < 1 or id > len(express_list): return [] return [express_list[id-1]['province']] # 在控制台中提示用户输入省份,等待用户输入,并返回输入的省份 def input_province(): result = '' def get_input(): nonlocal result result = input_box.get() input_box.destroy() root = tk.Tk() root.title('Input Province') input_box = tk.Entry(root) input_box.pack() input_box.focus_set() button = tk.Button(root, text='OK', command=get_input) button.pack() root.mainloop() return result # 点击“直方图”按钮时执行的函数 def on_histogram_button_click(express_list): show_histogram(express_list) # 点击“省->编号”按钮时执行的函数 def on_province_to_id_button_click(express_list): province = input_province() ids = search_by_province(express_list, province) if len(ids) == 0: messagebox.showinfo('Search Result', 'No express found in {}'.format(province)) else: messagebox.showinfo('Search Result', 'Express IDs in {}: {}'.format(province, ', '.join(map(str, ids)))) # 点击“编号->省”按钮时执行的函数 def on_id_to_province_button_click(express_list): id_str = input('Enter express ID: ') try: id = int(id_str) provinces = search_by_id(express_list, id) if len(provinces) == 0: print('Invalid express ID:', id) else: print('Province of express {}: {}'.format(id, provinces[0])) except ValueError: print('Invalid input:', id_str) # 主函数 def main(): # 读取Excel表格中的数据 express_list = read_excel('express.xlsx') # 创建图形窗口和按钮 root = tk.Tk() root.title('Express Management') histogram_button = tk.Button(root, text='Histogram', command=lambda: on_histogram_button_click(express_list)) histogram_button.pack() province_to_id_button = tk.Button(root, text='Province -> ID', command=lambda: on_province_to_id_button_click(express_list)) province_to_id_button.pack() id_to_province_button = tk.Button(root, text='ID -> Province', command=lambda: on_id_to_province_button_click(express_list)) id_to_province_button.pack() # 进入主循环 root.mainloop() if __name__ == '__main__': main() ``` 这个代码会读取名为`express.xlsx`的Excel表格中的数据,然后在图形窗口中创建三个按钮:“直方图”、“省->编号”和“编号->省”。点击“直方图”按钮时,会在图形窗口中显示各省份快递数量的直方图;点击“省->编号”按钮时,会在控制台中提示用户输入省份,并在命令行中显示符合条件的快递编号;点击“编号->省”按钮时,会在控制台中提示用户输入快递编号,并在命令行中显示符合条件的省份。 希望这个代码可以满足您的需求!

相关推荐

最新推荐

recommend-type

如何实现java8 list按照元素的某个字段去重

主要介绍了如何实现java8 list按照元素的某个字段去重,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
recommend-type

java8中Stream的使用以及分割list案例

主要介绍了java8中Stream的使用以及分割list案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

Python在for循环中更改list值的方法【推荐】

主要介绍了Python在for循环中更改list值的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

java中利用List的subList方法实现对List分页(简单易学)

本篇文章主要介绍了java中list数据拆分为sublist实现页面分页的简单代码,具有一定的参考价值,有需要的可以了解一下。
recommend-type

Java中对List去重 Stream去重的解决方法

主要介绍了Java中对List去重, Stream去重的问题解答,文中给大家介绍了Java中List集合去除重复数据的方法,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。