(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表格中的数据,然后在图形窗口中创建三个按钮:“直方图”、“省->编号”和“编号->省”。点击“直方图”按钮时,会在图形窗口中显示各省份快递数量的直方图;点击“省->编号”按钮时,会在控制台中提示用户输入省份,并在命令行中显示符合条件的快递编号;点击“编号->省”按钮时,会在控制台中提示用户输入快递编号,并在命令行中显示符合条件的省份。
希望这个代码可以满足您的需求!