一、制作UI界面

创建一个widget,从Widget Box工具箱中拖拽3个label、3个line Edit、1个Push Button、1个tableWidget。修改控件名后效果如下图,保存并命名为get_stationtrain.ui

Qt Designer工具的使用方法:python 之 Qt Designer工具的使用方法

get_stationtrain.ui的程序代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>widget</class><widget class="QWidget" name="widget"><property name="geometry"><rect><x>0</x><y>0</y><width>1066</width><height>809</height></rect></property><property name="windowTitle"><string>Form</string></property><widget class="QLabel" name="date_label"><property name="geometry"><rect><x>20</x><y>10</y><width>54</width><height>12</height></rect></property><property name="text"><string>查询日期</string></property></widget><widget class="QLabel" name="from_label"><property name="geometry"><rect><x>220</x><y>10</y><width>54</width><height>12</height></rect></property><property name="text"><string>出发地</string></property></widget><widget class="QLabel" name="to_label"><property name="geometry"><rect><x>420</x><y>10</y><width>54</width><height>12</height></rect></property><property name="text"><string>目的地</string></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>967</x><y>6</y><width>75</width><height>23</height></rect></property><property name="text"><string>查询</string></property></widget><widget class="QLineEdit" name="date_edit"><property name="geometry"><rect><x>90</x><y>6</y><width>113</width><height>20</height></rect></property></widget><widget class="QLineEdit" name="from_edit"><property name="geometry"><rect><x>290</x><y>6</y><width>113</width><height>20</height></rect></property></widget><widget class="QLineEdit" name="to_edit"><property name="geometry"><rect><x>490</x><y>6</y><width>113</width><height>20</height></rect></property></widget><widget class="QTableWidget" name="tableWidget"><property name="geometry"><rect><x>20</x><y>40</y><width>1021</width><height>741</height></rect></property><property name="sortingEnabled"><bool>false</bool></property></widget></widget><resources/><connections/>
</ui>

二、将.ui文件转换为.py文件

使用命令行转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。

pyuic5 -o get_stationtrain.py get_stationtrain.ui

转换后的get_stationtrain.py文件内容如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'get_stationtrain.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_widget(object):def setupUi(self, widget):widget.setObjectName("widget")widget.resize(1066, 809)self.date_label = QtWidgets.QLabel(widget)self.date_label.setGeometry(QtCore.QRect(20, 10, 54, 12))self.date_label.setObjectName("date_label")self.from_label = QtWidgets.QLabel(widget)self.from_label.setGeometry(QtCore.QRect(220, 10, 54, 12))self.from_label.setObjectName("from_label")self.to_label = QtWidgets.QLabel(widget)self.to_label.setGeometry(QtCore.QRect(420, 10, 54, 12))self.to_label.setObjectName("to_label")self.pushButton = QtWidgets.QPushButton(widget)self.pushButton.setGeometry(QtCore.QRect(967, 6, 75, 23))self.pushButton.setObjectName("pushButton")self.date_edit = QtWidgets.QLineEdit(widget)self.date_edit.setGeometry(QtCore.QRect(90, 6, 113, 20))self.date_edit.setObjectName("date_edit")self.from_edit = QtWidgets.QLineEdit(widget)self.from_edit.setGeometry(QtCore.QRect(290, 6, 113, 20))self.from_edit.setObjectName("from_edit")self.to_edit = QtWidgets.QLineEdit(widget)self.to_edit.setGeometry(QtCore.QRect(490, 6, 113, 20))self.to_edit.setObjectName("to_edit")self.tableWidget = QtWidgets.QTableWidget(widget)self.tableWidget.setGeometry(QtCore.QRect(20, 40, 1021, 741))self.tableWidget.setObjectName("tableWidget")self.tableWidget.setColumnCount(0)self.tableWidget.setRowCount(0)self.retranslateUi(widget)QtCore.QMetaObject.connectSlotsByName(widget)def retranslateUi(self, widget):_translate = QtCore.QCoreApplication.translatewidget.setWindowTitle(_translate("widget", "高铁火车票查询"))self.date_label.setText(_translate("widget", "查询日期"))self.from_label.setText(_translate("widget", "出发地"))self.to_label.setText(_translate("widget", "目的地"))self.pushButton.setText(_translate("widget", "查询"))self.tableWidget.setSortingEnabled(False)

三、界面与业务逻辑分离实现
新建call_get_stationtrain.py文件程序,调用get_stationtrain.py文件。

import sys
import requests
import json
import re
# PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import *
# 导入designer工具生成的login模块
from test12306.get_stationtrain import Ui_widgeturl = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971"
response = requests.get(url, verify=False)
# 将车站的名字和编码进行提取
station = re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)
station_code = dict(station)
station_names = dict(zip(station_code.values(), station_code.keys()))
# print(station_names)
# # print(station_code)class MyMainForm(QMainWindow, Ui_widget):def __init__(self, parent=None):super(MyMainForm, self).__init__(parent)self.setupUi(self)# 添加登录按钮信号和槽。注意display函数不加小括号()self.pushButton.clicked.connect(self.display)# 添加退出按钮信号和槽。调用close函数# # self.cancel_pushButton.clicked.connect(self.close)def display(self):# 利用line Edit控件对象text()函数获取界面输入date = self.date_edit.text()from_station = station_code[self.from_edit.text()]to_station = station_code[self.to_edit.text()]# date = '2021-02-20'# from_station = station_code['北京']# to_station = station_code['上海']urls = "https://kyfw.12306.cn/otn/leftTicket/queryZ?"cookie = '''Cookie: _uab_collina=161180740889551547386455; JSESSIONID=7643AF61D00634AFE9BE64B67EBBF7FC; RAIL_EXPIRATION=1612068432945; RAIL_DEVICEID=Ufn-bQhIG3NO2xfdqot7NW-ram9ItCaiwkCCjogFMH2cTkwFuyZUiIcGWxwTlaGxNVhxMIu_oQwyguKd0SRduBIP7Yan_tu6LPhTte-wtvySRHwW9XM7GPEt29lmjy-jOx6YaZ5ufxC9ZCkiukRnSzB3B03TJRtc; BIGipServerotn=4057399562.50210.0000; BIGipServerpassport=820510986.50215.0000; route=495c805987d0f5c8c84b14f60212447d;'''headers = {"User-Agent": "Mozilla/5.0(WindowsNT10.0;Win64;x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/88.0.4324.104Safari/537.36",'Cookie': cookie}urls = urls + "leftTicketDTO.train_date=" + date + "&leftTicketDTO.from_station=" + from_station + "&leftTicketDTO.to_station=" + to_station + "&purpose_codes=ADULT"# request请求获取主页r = requests.get(urls, headers=headers, verify=False)r.content.decode("utf-8")r.raise_for_status()  # 如果发送了一个错误的请求,会抛出异常r.encoding = r.apparent_encodinghtml = json.loads(r.text)entries = html['data']['result']datas = []for i in entries:item = i.split('|')  # 使用“|”进行分割# 获取有票的高铁车次信息 # 获取车次信息,在3号位置 # 始发站信息在6号位置 # 终点站信息在7号位置 # 出发时间在8号位置# 抵达时间在9号位置 # 经历时间在10号位置 # 特别注意,商务座在32或25位置 # 一等座信息在31号位置 # 二等座信息在30号位if (item[30] != "" and item[30] != "无") or (item[31] != "" and item[31] != "无") or (item[32] != "" and item[32] != "无") or (item[25] != "" and item[25] != "无"):ii = [item[3], station_names[item[6]], station_names[item[7]], item[8], item[9], item[10],item[32] or item[25],item[31], item[30]]datas.append(ii)self.tableWidget.setRowCount(len(datas))#设置列表行数self.tableWidget.setColumnCount(len(datas[0]))#设置列表列数self.tableWidget.setVerticalHeaderLabels(['1', '2', '3'])#设置列表行数表头self.tableWidget.setHorizontalHeaderLabels(['车次', '出发车站', '达到车站', '出发时间', '到达时间', '历时', '商务座', '一等座', '二等座'])#设置列表列数表头self.tableWidget.setStyleSheet("QHeaderView::section{background:skyblue;}")#表头加点颜色for i, row in enumerate(datas):#列表数据for j, col in enumerate(row):item = QTableWidgetItem(col)self.tableWidget.setItem(i, j, item)if __name__ == "__main__":# 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行app = QApplication(sys.argv)# 初始化myWin = MyMainForm()# 将窗口控件显示在屏幕上myWin.show()# 程序运行,sys.exit方法确保程序完整退出。sys.exit(app.exec_())

执行代码后效果如下:

输入查询日期、出发地、目的地后点击查询效果如下:

四、打包成.exe文件
方法如下:Python如何生成可执行的.exe文件

python 之 Qt Designer 高铁火车票查询工具相关推荐

  1. python+pyqt5+Qt Designer开发GUI vcf生成器

    文章目录 前言 一.GUI界面截图 二.使用说明 三.下载地址 总结 前言 今天公司领导给了个任务,要求写个vcf文件生成器,那就写吧...这个GUI工具是使用python+pyqt5+Qt Desi ...

  2. pythonrequests查询_PyQt5+requests实现车票查询工具

    PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下 结构图 效果图 思路 1.search(QPushButton)点击信号(clicked)连接到自定义的槽函数(event. ...

  3. python英文版怎么改成中文版_“PyQt的Qt Designer菜单是中文版的,怎么改成英文的“python的qt designer教程...

    python qt designer 怎么多建一个dialog 请说的详细点,那原消?还是只是出外一个窗口,如果出现另外一个窗口,那么这个窗口是 exec()吗?就是弹出窗口不关闭无法点击原有窗口,即 ...

  4. python 之 Qt Designer工具的使用方法

    一.Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py ...

  5. Python 之 Qt Designer工具相关安装配置

    一.pyqt5.pyqt5-tool.paramiko.pyInstaller安装 直接在线安装: pip3 install PyQt5 pip3 install PyQt5-tools pip3 i ...

  6. Python PyQt5 Qt Designer (Qt设计师)

    PyQt5 Qt Designer (Qt设计师) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog.csdn.net/Rozol/article/details/87 ...

  7. Pyqt5+python+ErIC6+QT designer

    Eric6安装及配置 https://blog.csdn.net/weixin_41656968/article/details/80253012 Python3.6+PyQt5+Eric6.0环境配 ...

  8. python判断火车票座位_Python3 实现火车票查询工具

    首先,感谢实验楼的平台.为我们这些小白提供了学习的平台.其次针对这个项目来说的话,其实算是思路比较简单的.无非就是查询然后展示.不过里面涉及到的东西是很多的,比如编码的转换.类和函数.yeilde.. ...

  9. OpenCV+ Qt Designer 开发人脸识别考勤系统

    文章目录 1. 系统介绍 2. 系统架构 3. 开发步骤 3.1 安装必要的库 3.2 设计用户界面 3.3 编写代码 3.3.1 导入库 3.3.2 连接数据库 3.3.3 定义主窗口类 3.3.4 ...

最新文章

  1. python 归一化_一文学会用python进行数据预处理
  2. 吴恩达机器学习作业思路整理
  3. Node.Js从零开始搭建数据管理后台 (一)
  4. html表单 传递 符号,HTML源码中 form 标签的 enctype 属性
  5. 浅谈unity中gamma空间和线性空间
  6. 垂直拆分后,遇到瓶颈,数据水平拆分
  7. 牛客 - 货物种类(差分)
  8. IMail邮件服务-1
  9. deepin中自定义安装的软件如何加入到启动器
  10. python线程安全_线程,线程安全与python的GIL锁
  11. java脚本项目_java项目部署脚本 - xixingzhe的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. linux 测试工具
  13. C++ primer plus学习笔记 (3) _函数
  14. ThinkPad T61 X61安装XP系统的方法及xp驅動下載
  15. pycharm+python3.6安装pywifi
  16. DigiCert EV证书怎么样 DigiCert EV证书优势分析
  17. 个人博客(八)Hexo新建文章、主题小修改
  18. C语言:统计句子中元音字母的个数
  19. 全球与中国中型徒步鞋市场深度研究分析报告
  20. 精华|风控相关欺诈防范要点(规则制定)

热门文章

  1. vue-quill-editor自定义组件来实现填空题下标
  2. Simulink模型生成C语言
  3. WPS:找文件的历史版本
  4. 通过自动驾驶+物联网解决道路拥堵的方案建议(以虎门大桥为例)
  5. 2月18日绿健简报,星期六,农历正月廿八
  6. php中的网页漂浮代码,网页中上下漂浮的按钮JS代码-DEDE
  7. 怎么用计算机上摄像头拍照,win7电脑怎么用摄像头拍照?win7电脑用摄像头拍照的详细步骤...
  8. SAP中外协加工模式下原材料供应商直接发料给外协加工商的操作方法
  9. 在框架内用top.layer.open方式打开的子窗口中调用父窗口方法
  10. 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~