火车票查询

from tkinter import *
from tkinter import ttk
import tkinter
import requests
import re
import urllib3

禁用安全请求警告

requests.packages.urllib3.disable_warnings()

设置登录窗口属性

root = tkinter.Tk() # 生成root主窗口
root.geometry(“950x500”)
root.title(“查询车票”)

url=“https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9069
req=requests.get(url,verify=False)
reg="([\u4e00-\u9fa5]+)|([A-Z]+)"#匹配地点及地点标识
result_addr=re.findall(reg,req.text)
addr=dict(result_addr)#将匹配后的结果转化成字典类型
labelFrom = tkinter.Label(root, text=“出发地:”, justify=tkinter.RIGHT, width=80) # justify 多行文本的对齐方式;
labelFrom.place(x=10, y=5, width=80, height=20)
labelTO = tkinter.Label(root, text=“目的地:”, justify=tkinter.RIGHT, width=80)
labelTO.place(x=190, y=5, width=80, height=20)
#创建出发地的下拉框
VarFrom = tkinter.StringVar()
comboxlistFrom=ttk.Combobox(root,textvariable=VarFrom)
res=tuple(addr.keys())
comboxlistFrom[“values”]=res
comboxlistFrom.current(0)
#def go(*args):

print(comboxlistFrom.get())

#comboxlistFrom.bind("<>",go)
comboxlistFrom.place(x=100, y=5, width=80, height=20)
#创建目的地的下拉框
VarTo=tkinter.StringVar()
comboxlistTo=ttk.Combobox(root,textvariable=VarTo)
res1=tuple(addr.keys())
comboxlistTo[“values”]=res1
comboxlistTo.current(1)#默认值
#def go1(*args):

print(comboxlistTo.get())#打印选中的值

#comboxlistTo.bind("<>",go1)#绑定
comboxlistTo.place(x=280, y=5, width=80, height=20)

VarTime = tkinter.StringVar()
VarTime.set("")

创建标签

labelTime = tkinter.Label(root, text=“时 间:”, justify=tkinter.RIGHT, width=80)
labelTime.place(x=10, y=30, width=80, height=20)

#创建时间输入框
entryTime = tkinter.Entry(root, width=80, textvariable=VarTime)
entryTime.place(x=100, y=30, width=80, height=20)

tree = ttk.Treeview(root, show=“headings” )#创建表格并隐藏第一列
tree[“columns”] = (
“车次”, “出发时间”, “到达时间”, “历时”, “商务座/特等座”, “一等座”, “二等座”, “软卧”, “动卧”, “硬卧”, “软座”, “硬座”, “无座”,)
tree.column(“车次”, width=50) # 表示列,不显示
tree.column(“出发时间”, width=50)
tree.column(“到达时间”, width=50)
tree.column(“历时”, width=50)
tree.column(“商务座/特等座”, width=100)
tree.column(“一等座”, width=50)
tree.column(“二等座”, width=50)
tree.column(“软卧”, width=50)
tree.column(“动卧”, width=50)
tree.column(“硬卧”, width=50)
tree.column(“软座”, width=50)
tree.column(“硬座”, width=50)
tree.column(“无座”, width=50)

tree.heading(“车次”, text=“车次”) # 显示表头
tree.heading(“出发时间”, text=“出发时间”)
tree.heading(“到达时间”, text=“到达时间”)
tree.heading(“历时”, text=“历时”)
tree.heading(“商务座/特等座”, text=“商务座/特等座”)
tree.heading(“一等座”, text=“一等座”)
tree.heading(“二等座”, text=“二等座”)
tree.heading(“软卧”, text=“软卧”)
tree.heading(“动卧”, text=“动卧”)
tree.heading(“硬卧”, text=“硬卧”)
tree.heading(“软座”, text=“软座”)
tree.heading(“硬座”, text=“硬座”)
tree.heading(“无座”, text=“无座”)
tree.place(x=10, y=60, width=900, height=400)

查询按钮操作

def search():
From = comboxlistFrom.get()#获取出发地
To = comboxlistTo.get()#获取目的地
Time = entryTime.get()#获取时间
url = “https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9069
req = requests.get(url, verify=False)
reg = “([\u4e00-\u9fa5]+)|([A-Z]+)”
result_addr = re.findall(reg, req.text)
addr = dict(result_addr)
from_station = addr[From]
to_station = addr[To]
train_date = Time
url = “https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date=” + str(
train_date) + “&leftTicketDTO.from_station=” + str(from_station) + “&leftTicketDTO.to_station=” + str(
to_station) + “&purpose_codes=ADULT”#获取网站地址
response = requests.get(url, verify=False)
result = response.json()
for i in result[“data”][“result”]:
tmp_list = i.split("|")
url = “https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=” + tmp_list[2] + “&from_station_no=” +
tmp_list[16] + “&to_station_no=” + tmp_list[17] + “&seat_types=” + tmp_list[35] + “&train_date=”+train_date
try:
result=(requests.get(url)).json()
ticketPrice=result[“data”]
ticketPriceResult=ticketPrice.keys()
except:
continue
tree.insert("", “end”, values=(
tmp_list[3] or “-”, tmp_list[8] or “-”, tmp_list[9] or “-”, tmp_list[10] or “-”, tmp_list[32] or “-” , tmp_list[31] or “-”, tmp_list[30] or “-”,
“-”, tmp_list[23] or “-”, tmp_list[28] or “-”, “-”, tmp_list[29] or “-”, tmp_list[29] or “-”))# 向表中插入内容
if(“A9” in ticketPriceResult):
A9=ticketPrice[“A9”]
else:
A9="-"
if (“P” in ticketPriceResult):
P = ticketPrice[“P”]
else:
P = “-”
if (“M” in ticketPriceResult):
M = ticketPrice[“M”]
else:
M = “-”
if (“O” in ticketPriceResult):
O = ticketPrice[“O”]
else:
O = “-”
if (“A6” in ticketPriceResult):
A6 = ticketPrice[“A6”]
else:
A6 = “-”
if (“A4” in ticketPriceResult):
A4 = ticketPrice[“A4”]
else:
A4 = “-”
if (“F” in ticketPriceResult):
F = ticketPrice[“F”]
else:
F = “-”
if (“A3” in ticketPriceResult):
A3 = ticketPrice[“A3”]
else:
A3 = “-”
if (“A2” in ticketPriceResult):
A2 = ticketPrice[“A2”]
else:
A2 = “-”
if (“A1” in ticketPriceResult):
A1 = ticketPrice[“A1”]
else:
A1 = “-”
if (“WZ” in ticketPriceResult):
WZ = ticketPrice[“WZ”]
else:
WZ = “-”
tree.insert("",“end”,values=( “”, “”, “”, “”,A9 or P,M,O,A6,A4 ,F,A3,A2,A1,WZ))
tree.place(x=10, y=60, width=900, height=400)
buttonSearch = tkinter.Button(root, text=“查询”, command=search)#查询按钮
buttonSearch.place(x=190, y=30, width=50, height=20)

清空按钮操作

def clear():
VarTime.set("")
VarTo.set("")
VarFrom.set("")
buttonClear = tkinter.Button(root, text=“取消”, command=clear) # 取消按钮
buttonClear.place(x=280, y=30, width=50, height=20)
def cleTab():
x = tree.get_children()
for item in x:
tree.delete(item)

buttonCleTab = tkinter.Button(root, text=“清空表”, command=cleTab) # 情况表按钮
buttonCleTab.place(x=370, y=30, width=50, height=20)
root.mainloop()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值