python火车票查询工具tkinter_python 3.6 tkinter+urllib+json实现火车车次信息查询功能...
时间: 2023-12-12 16:04:04 浏览: 98
tk_tools:Python tkinter工具,Python3.6 +
这是一个很有趣的项目,使用了Python的Tkinter、urllib和json模块来实现火车票信息查询功能。Tkinter是Python的标准GUI库,用于创建窗口和控件,而urllib和json则用于从网络上获取和解析数据。
首先,你需要在窗口中添加一些控件,如文本框、标签、按钮等。然后,当用户点击查询按钮时,你需要使用urllib发送HTTP请求到火车票查询API,并从响应中解析出所需的信息。最后,你需要将结果显示在窗口中。
以下是大体的步骤:
1. 导入Tkinter、urllib和json模块。
2. 创建一个窗口并添加所需的控件,如文本框、标签和按钮。
3. 创建一个函数,当用户点击查询按钮时会被调用。该函数应该从文本框中获取用户输入的出发地、目的地、日期等信息,并将其构造成查询URL。
4. 使用urllib发送HTTP请求到查询URL,并从响应中获取JSON格式的火车票信息。
5. 解析JSON数据,提取出需要的信息,并将其显示在窗口中。
6. 运行窗口,等待用户输入查询信息。
下面是一个简单的示例代码,仅供参考:
```python
import tkinter as tk
import urllib.request
import json
root = tk.Tk()
root.title("火车票查询工具")
frame1 = tk.Frame(root)
frame1.pack(pady=10)
label1 = tk.Label(frame1, text="出发地:")
label1.pack(side=tk.LEFT)
entry1 = tk.Entry(frame1)
entry1.pack(side=tk.LEFT)
label2 = tk.Label(frame1, text="目的地:")
label2.pack(side=tk.LEFT)
entry2 = tk.Entry(frame1)
entry2.pack(side=tk.LEFT)
label3 = tk.Label(frame1, text="日期:")
label3.pack(side=tk.LEFT)
entry3 = tk.Entry(frame1)
entry3.pack(side=tk.LEFT)
frame2 = tk.Frame(root)
frame2.pack(pady=10)
text = tk.Text(frame2, height=20, width=50)
text.pack(side=tk.LEFT)
scrollbar = tk.Scrollbar(frame2)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
text.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
def query():
url = "https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=" + \
entry3.get() + "&leftTicketDTO.from_station=" + \
entry1.get() + "&leftTicketDTO.to_station=" + entry2.get() + "&purpose_codes=ADULT"
req = urllib.request.Request(url)
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
response = urllib.request.urlopen(req)
result = json.loads(response.read().decode('utf-8'))
trains = result['data']['result']
text.delete('1.0', tk.END)
for train in trains:
train_info = train.split('|')
text.insert(tk.END, "车次:" + train_info[3] + "\n")
text.insert(tk.END, "出发站:" + train_info[6] + "\n")
text.insert(tk.END, "到达站:" + train_info[7] + "\n")
text.insert(tk.END, "出发时间:" + train_info[8] + "\n")
text.insert(tk.END, "到达时间:" + train_info[9] + "\n")
text.insert(tk.END, "历时:" + train_info[10] + "\n")
text.insert(tk.END, "商务座:" + train_info[32] + "\n")
text.insert(tk.END, "一等座:" + train_info[31] + "\n")
text.insert(tk.END, "二等座:" + train_info[30] + "\n")
text.insert(tk.END, "软卧:" + train_info[23] + "\n")
text.insert(tk.END, "硬卧:" + train_info[28] + "\n")
text.insert(tk.END, "硬座:" + train_info[29] + "\n")
text.insert(tk.END, "\n")
button = tk.Button(root, text="查询", command=query)
button.pack()
root.mainloop()
```
该程序会创建一个简单的窗口,用户可以在其中输入出发地、目的地和日期信息,并点击“查询”按钮进行查询。查询结果将显示在窗口的文本框中。注意,这个示例代码中使用的查询API可能已经过时,请自行查找可用的API。
阅读全文