Python 创建GUI来提取VIN编号的信息
车辆识别号(VIN)是一个唯一的17位代码,用于1981年之后生产的每个车辆。它包含有关车辆制造厂商、型号、制造年份、原产国以及其他相关细节的信息。在本使用说明中,我们将学习如何使用Python编程语言创建一个图形用户界面(GUI)来从VIN编号中提取车辆信息。
先决条件
在我们深入研究创建GUI的细节之前,您应该对Python编程、面向对象编程(OOP)概念以及如何使用Tkinter模块有基本的理解。
推荐的设置清单
- pip install tkinter, pandas, requests
-
预期用户将能够访问任何独立的IDE,如VS-Code、PyCharm、Atom或Sublime Text。
-
甚至可以使用在线Python编译器,如Kaggle.com、Google Cloud平台或其他任何平台都可以。
-
更新的Python版本。在撰写本文时,我使用的是3.10.9版本。
-
了解使用Jupyter Notebook的用法。
-
了解和应用虚拟环境可能会有益,但不是必须的,还可以在某些情况下使用API。
完成任务所需的步骤
步骤1:导入必要的模块
from tkinter import*
import requests
接下来,在您的Python脚本中,我们需要导入必要的库。在这种情况下,我们需要requests库来发起API请求,并使用tkinter库创建GUI界面。下面是导入语句−
步骤2:创建一个函数来获取VIN数据
现在,您需要创建一个函数,使用API从VIN号码中获取车辆信息。在这个例子中,我们使用来自NHTSA(国家公路交通安全管理局)的VIN解码器API来获取车辆信息。以下是函数的示例:
def get_vin_data(vin):
url = f'https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json'
response = requests.get(url)
if response.status_code == 200:
return response.json()['Results']
else:
return None
此函数以VIN码作为输入,并返回车辆信息作为JSON对象。
步骤3:创建一个GUI界面以输入VIN码和显示车辆信息−
接下来,您需要创建一个GUI界面,允许用户输入VIN码并显示车辆信息作为输出。在这个例子中,我们使用tkinter库来创建GUI元素。以下是代码−
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
for d in data:
info_text.insert(END, f"{d['Variable']} : {d['Value']}\n")
else:
info_text.insert(END, "No data found for the VIN provided.\n")
root = Tk()
root.title("VIN Decoder")
vin_label = Label(root, text="Enter VIN: ")
vin_label.pack()
vin_entry = Entry(root)
vin_entry.pack()
submit_button = Button(root, text="Decode", command=display_vin_data)
submit_button.pack()
info_text = Text(root)
info_text.pack()
root.mainloop()
这段代码创建了一个有标签、文本框、按钮和另一个文本框的窗口。用户可以在文本框中输入VIN号码,然后点击“解码”按钮,将车辆信息显示在第二个文本框中。
步骤4:将结果显示为技术文档:
如果您希望将车辆信息显示为技术文档,可以修改display_vin_data函数以生成所需格式的文档。以下是更新后的代码
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
doc_text = f"Vehicle Information\n{'='*20}\n"
for d in data:
doc_text += f"{d['Variable']} : {d['Value']}\n"
info_text.insert(END, doc_text)
else:
info_text.insert(END, "No data found for the VIN provided.\n")
这段代码生成以下格式的技术文档
Vehicle Information
====================
<Variable 1> : <Value 1>
<Variable 2> : <Value 2>
...
<Variable n> : <Value n>
最终程序
import requests
from tkinter import *
def get_vin_data(vin):
url = f'https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json'
response = requests.get(url)
if response.status_code == 200:
return response.json()['Results']
else:
return None
def display_vin_data():
vin = vin_entry.get()
data = get_vin_data(vin)
if data:
doc_text = f"Vehicle Information\n{'='*20}\n"
for d in data:
doc_text += f"{d['Variable']} : {d['Value']}\n"
info_text.insert(END, doc_text)
else:
info_text.insert(END, "No data found for the VIN provided.\n")
root = Tk()
root.title("VIN Decoder")
vin_label = Label(root, text="Enter VIN: ")
vin_label.pack()
vin_entry = Entry(root)
vin_entry.pack()
submit_button = Button(root, text="Decode", command=display_vin_data)
submit_button.pack()
info_text = Text(root)
info_text.pack()
root.mainloop()
输出
现实世界的例子
示例1:从VIN码中检索车辆信息
- 用户输入VIN码到输入框中(例如1HGCM82633A004352)
-
用户输入有效的API密钥到输入框中
-
用户点击“提交”按钮
-
GUI显示从API检索到的车辆信息(例如2003年本田雅阁)
输出
屏幕要求用户输入VIN码
现在我们可以看到所需的VIN码输出,证明我们的应用程序正常工作。
示例2:处理无效VIN码的错误
- 用户将无效VIN码输入到输入框中(例如1234567890)
-
用户输入有效的API密钥到输入框中
-
用户点击“提交”按钮
-
GUI显示一个错误消息,指示VIN码无效并标识错误。
在第二个场景中,我们正在测试错误检查,因为这是一个质量控制步骤,可以检查输出的有效性。
示例3:处理错误的API密钥
- 用户将有效的VIN号码输入到输入框中(例如JM1BK123451234567)
-
用户将错误或无效的API密钥输入到输入框中
-
用户点击“提交”按钮
-
GUI显示错误消息,指示VIN的某些数字存在问题,但尽最大努力提供最接近的输出,并证明这也可用于检查缺失值和预测分析。
结论
要使用此脚本,将其另存为带有.py扩展名的Python文件,并使用Python解释器运行。一旦GUI窗口打开,将VIN号码输入到文本框中,然后点击“解码”按钮以获取并显示车辆信息作为技术文件。
使用Python创建一个从VIN号码中提取车辆信息的GUI是对汽车行业或车辆历史感兴趣的任何人都有用的技能。通过按照本说明手册中概述的步骤,您可以轻松将此功能集成到自己的Python程序和应用程序中。无论您是汽车爱好者,机械师还是车辆历史学家,此工具都可以帮助您对所感兴趣的车辆获得有价值的见解。
注意:此示例使用NHTSA的VIN解码器API,对于未注册用户,每天限制25个请求。如果您需要进行更多请求,您可以注册API密钥并在URL中使用它。