精华内容
下载资源
问答
  • MAC系统下配置PyQt5开发环境

    千次阅读 2019-12-22 11:27:39
    MAC系统下配置PyQt5开发环境1、集成开发环境PyCharm2、python版本管理工具-Anaconda3、在Anaconda中创建python3.6虚拟环境4、在python3.6虚拟环境中下载PyQt5以及相关的包5、配置QtDesigner6、将设计好的UI文件转换...

    1、集成开发环境PyCharm

    PyCharm是一个专门针对Python语言的集成开发环境

    2、python版本管理工具-Anaconda

    有很多python版本管理工具,但是Anaconda真的很好用。在PyCharm中配置配置好解释器后,就可以很方便的运行调试代码

    3、在Anaconda中创建python3.6虚拟环境

    conda create -n python3.6

    4、在python3.6虚拟环境中下载PyQt5以及相关的包

    激活虚拟环境:source activate python3.6
    安装PyQt5: pip install PyQt5 -i [指定源下载]

    5、配置QtDesigner

    MAC下还没有可用的单独的QtDesigner安装包,但是Anaconda中集成了QtDesigner,找到Anaconda的bin目录,里面有Designer.app。在PyCharm中配置好外部工具,添加Designer.app的安装路径即可在PyCharm中打开Designer.app。

    6、将设计好的UI文件转换成py文件

    python中有脚本文件可以实现这样的功能,也可以在PyCharm中配置。手动转换时,在激活虚拟环境的命令行中分别执行:
    pyuic5 *.ui -o *.py
    pyrcc5 *.rcc -o *.py

    展开全文
  • PyQt5 开发 民航票务管理系统知识点PyQt5 实现页面跳转 知识点 PyQt5 实现页面跳转

    这份 Java 是我的实验的:《小型MIS的开发》— Spring + Mybatis + JavaFx 开发 民航票务管理系统

    下面这份 Python 版是帮女朋友写的!

    为什么要拿 Python 做呢?

    这两天正好在下大雨,昨天我把自己的软件 + 报告写完后,准备开始帮女朋友写,原本打算在我的代码的基础上改改 UI 和 逻辑什么的,就可以搞定了;这是原计划,毕竟用 JavaFx 开发确实是效率高啊!

    但是昨天的大雨让我没法去自习室。。。我的考研相关的书都在自习室,既然只能呆在宿舍。。那不如学点新东西把,于是我选择了 Python + Qt 制作图形化界面,就当增加一下自己的技术栈。。

    学习一天的知识点

    如果是真心的想学习一下的话,可以看看这几篇文章,这些是我将这个项目要用到的知识点模块化记录了一下:

    首先是 PyQt5 的 安装 与 入门教程【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面

    然后是安装时可能遇到的问题:PyQt5: This application failed to start because it could not find or load the Qt platform plugin

    完成上面的 安装 与 入门 以后可以正式开始写我们这个项目了;
    然后需要了解的是 页面跳转 相关的知识:【PyQt5】designer 页面点击按钮跳转页面

    了解这个以后,就可以完整的搭建出一个完整的 包含点击按钮进行跳转的 界面了;但是此时界面上是没有数据的,因此下一步需要学习的是 Python 连接数据库 相关知识:【PyQt5】PyMySQL 连接 MySQL数据库

    学会与数据库打交道以后,我们只要再学一个 PyQt5 的组件——tableWidget 就可以完成我们这次实验了:【PyQt5】连接 mysql 查询数据 并显示在 tableWidget 表格

    以上是如果你想靠自己的实力完成这次实验需要掌握的知识点。

    开发环境 与 项目整体结构

    我的开发环境是:

    • PyQt 5
    • Python 3.8
    • VsCode
    • MySQL 5.7

    项目整体结构:
    在这里插入图片描述
    ui 目录下存放 .ui 文件,这个是由 qt designer 设计出来的界面文件,我们可以通过 pyuic5 将它们转化为 Python 代码,所以 hello.ui —> hello.pylogin.ui —> login.pyoperate.ui —> operate.py,一一对应。

    顺带一提,代码的编译运行 是不需要 .ui 文件的,只有当你想要修改界面时候,才会去动他。

    至于 app.py,那就是我们的核心逻辑文件了,如果想要看懂这里的东西就需要去学习上面列出的知识点啦!

    数据库建表

    需要两张表:

    • 用户表 user
    • 航班信息表 flight

    命令行登录 MySQL:

    mysql -u root -p
    > 输入密码: 1234
    

    建立一个数据库:sxn210224,并进入:

    CREATE DATABASE sxn210224;
    USE sxn210224;
    

    下面开始建表:

    用户表的 SQL

    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for user
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `u_id` varchar(8) NOT NULL,
      `u_username` varchar(50) DEFAULT NULL,
      `u_password` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`u_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('17210224', 'luzhenyu', '123456');
    INSERT INTO `user` VALUES ('17210309', 'hanlei', '123456');
    

    航班信息表的 SQL

    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for flight
    -- ----------------------------
    DROP TABLE IF EXISTS `flight`;
    CREATE TABLE `flight` (
      `f_id` char(8) NOT NULL,
      `f_src` varchar(15) DEFAULT NULL,
      `f_des` varchar(15) DEFAULT NULL,
      `f_date` date NOT NULL,
      `f_start_time` char(6) DEFAULT NULL,
      `f_end_time` char(6) DEFAULT NULL,
      `f_remain_seats` int(4) DEFAULT NULL,
      `f_fares` float(8,0) DEFAULT NULL,
      `f_discount_nums` float(8,0) DEFAULT NULL,
      `f_discount` float(8,0) DEFAULT NULL,
      `f_subordinate_company` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`f_id`,`f_date`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of flight
    -- ----------------------------
    INSERT INTO `flight` VALUES ('F001', '扬州', '苏州', '2012-12-12', '15:30', '14:20', '5', '99', '5', '1', '振宇有限公司');
    INSERT INTO `flight` VALUES ('F002', '扬州', '苏州', '2012-12-13', '12:20', '15:50', '20', '99', '5', '1', '振宇有限公司');
    INSERT INTO `flight` VALUES ('F003', '扬州', '北京', '2012-12-13', '12:20', '17:50', '4', '99', '5', '1', '振宇有限公司');
    INSERT INTO `flight` VALUES ('F004', '扬州', '泰国', '2012-12-13', '7:20', '8:50', '2', '99', '5', '1', '振宇有限公司');
    INSERT INTO `flight` VALUES ('F005', '扬州', '广州', '2012-12-14', '5:20', '14:50', '40', '99', '5', '1', '振宇有限公司');
    

    界面代码

    注意,我们的界面都是通过 Qt designer 拖拽制作的 .ui 文件,再通过 pyuic5 工具转为 .py 文件

    简单起见,总共就只有三个界面文件:

    • 主界面 hello.py
    • 登陆界面 login.py
    • 操作界面 operate.py

    主界面:hello.py

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(510, 300)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
            self.gridLayout_3.setObjectName("gridLayout_3")
            self.gridLayout_2 = QtWidgets.QGridLayout()
            self.gridLayout_2.setObjectName("gridLayout_2")
            self.label = QtWidgets.QLabel(self.centralwidget)
            font = QtGui.QFont()
            font.setPointSize(22)
            self.label.setFont(font)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
            self.gridLayout = QtWidgets.QGridLayout()
            self.gridLayout.setContentsMargins(-1, -1, -1, 15)
            self.gridLayout.setHorizontalSpacing(10)
            self.gridLayout.setVerticalSpacing(15)
            self.gridLayout.setObjectName("gridLayout")
            self.queryButton = QtWidgets.QPushButton(self.centralwidget)
            self.queryButton.setMinimumSize(QtCore.QSize(250, 40))
            self.queryButton.setMaximumSize(QtCore.QSize(250, 40))
            self.queryButton.setObjectName("queryButton")
            self.gridLayout.addWidget(self.queryButton, 1, 0, 1, 1)
            self.manageButton = QtWidgets.QPushButton(self.centralwidget)
            self.manageButton.setMinimumSize(QtCore.QSize(250, 40))
            self.manageButton.setMaximumSize(QtCore.QSize(250, 40))
            self.manageButton.setObjectName("manageButton")
            self.gridLayout.addWidget(self.manageButton, 0, 0, 1, 1)
            self.gridLayout_2.addLayout(self.gridLayout, 1, 0, 1, 1)
            self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1)
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "主界面"))
            self.label.setText(_translate("MainWindow", "欢迎使用票务管理系统"))
            self.queryButton.setText(_translate("MainWindow", "票务查询"))
            self.manageButton.setText(_translate("MainWindow", "票务管理"))
    

    登录界面:login.py

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(510, 290)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
            self.gridLayout_2.setObjectName("gridLayout_2")
            self.label = QtWidgets.QLabel(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
            self.label.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(25)
            self.label.setFont(font)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
            self.gridLayout = QtWidgets.QGridLayout()
            self.gridLayout.setContentsMargins(-1, -1, -1, 15)
            self.gridLayout.setSpacing(20)
            self.gridLayout.setObjectName("gridLayout")
            self.label_2 = QtWidgets.QLabel(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
            self.label_2.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.label_2.setFont(font)
            self.label_2.setObjectName("label_2")
            self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
            self.userText = QtWidgets.QLineEdit(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.userText.sizePolicy().hasHeightForWidth())
            self.userText.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.userText.setFont(font)
            self.userText.setAlignment(QtCore.Qt.AlignCenter)
            self.userText.setObjectName("userText")
            self.gridLayout.addWidget(self.userText, 0, 1, 1, 1)
            self.label_3 = QtWidgets.QLabel(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
            self.label_3.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.label_3.setFont(font)
            self.label_3.setObjectName("label_3")
            self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
            self.pwdText = QtWidgets.QLineEdit(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.pwdText.sizePolicy().hasHeightForWidth())
            self.pwdText.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.pwdText.setFont(font)
            self.pwdText.setAlignment(QtCore.Qt.AlignCenter)
            self.pwdText.setObjectName("pwdText")
            self.gridLayout.addWidget(self.pwdText, 1, 1, 1, 1)
            self.gridLayout_2.addLayout(self.gridLayout, 1, 0, 1, 1)
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setContentsMargins(-1, -1, -1, 12)
            self.horizontalLayout.setSpacing(20)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.okButton = QtWidgets.QPushButton(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.okButton.sizePolicy().hasHeightForWidth())
            self.okButton.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.okButton.setFont(font)
            self.okButton.setObjectName("okButton")
            self.horizontalLayout.addWidget(self.okButton)
            self.cancelButton = QtWidgets.QPushButton(self.centralwidget)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.cancelButton.sizePolicy().hasHeightForWidth())
            self.cancelButton.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(12)
            self.cancelButton.setFont(font)
            self.cancelButton.setObjectName("cancelButton")
            self.horizontalLayout.addWidget(self.cancelButton)
            self.gridLayout_2.addLayout(self.horizontalLayout, 2, 0, 1, 1)
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", " 登陆界面"))
            self.label.setText(_translate("MainWindow", "请输入用户信息"))
            self.label_2.setText(_translate("MainWindow", "用户名"))
            self.label_3.setText(_translate("MainWindow", "密码"))
            self.okButton.setText(_translate("MainWindow", "确定"))
            self.cancelButton.setText(_translate("MainWindow", "取消"))
    

    操作界面:operate.py

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(750, 460)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
            self.tableWidget.setGeometry(QtCore.QRect(0, 90, 731, 161))
            self.tableWidget.setObjectName("tableWidget")
            self.tableWidget.setColumnCount(11)
            self.tableWidget.setRowCount(9)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(0, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(1, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(2, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(3, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(4, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(5, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(6, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(7, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setVerticalHeaderItem(8, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(0, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(1, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(2, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(3, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(4, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(5, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(6, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(7, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(8, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(9, item)
            item = QtWidgets.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(10, item)
            self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
            self.layoutWidget.setGeometry(QtCore.QRect(100, 380, 208, 35))
            self.layoutWidget.setObjectName("layoutWidget")
            self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
            self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
            self.horizontalLayout.setSpacing(20)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.pushButton = QtWidgets.QPushButton(self.layoutWidget)
            font = QtGui.QFont()
            font.setPointSize(13)
            self.pushButton.setFont(font)
            self.pushButton.setObjectName("pushButton")
            self.horizontalLayout.addWidget(self.pushButton)
            self.exitButton = QtWidgets.QPushButton(self.layoutWidget)
            font = QtGui.QFont()
            font.setPointSize(13)
            self.exitButton.setFont(font)
            self.exitButton.setObjectName("exitButton")
            self.horizontalLayout.addWidget(self.exitButton)
            self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
            self.layoutWidget1.setGeometry(QtCore.QRect(50, 290, 241, 74))
            self.layoutWidget1.setObjectName("layoutWidget1")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget1)
            self.verticalLayout.setContentsMargins(0, 0, 0, 0)
            self.verticalLayout.setObjectName("verticalLayout")
            self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_3.setSpacing(20)
            self.horizontalLayout_3.setObjectName("horizontalLayout_3")
            self.label = QtWidgets.QLabel(self.layoutWidget1)
            font = QtGui.QFont()
            font.setPointSize(15)
            self.label.setFont(font)
            self.label.setObjectName("label")
            self.horizontalLayout_3.addWidget(self.label)
            self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget1)
            font = QtGui.QFont()
            font.setPointSize(15)
            self.lineEdit.setFont(font)
            self.lineEdit.setObjectName("lineEdit")
            self.horizontalLayout_3.addWidget(self.lineEdit)
            self.verticalLayout.addLayout(self.horizontalLayout_3)
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
            self.horizontalLayout_2.setSpacing(20)
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.label_2 = QtWidgets.QLabel(self.layoutWidget1)
            font = QtGui.QFont()
            font.setPointSize(15)
            self.label_2.setFont(font)
            self.label_2.setObjectName("label_2")
            self.horizontalLayout_2.addWidget(self.label_2)
            self.dateEdit = QtWidgets.QDateEdit(self.layoutWidget1)
            sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
            sizePolicy.setHorizontalStretch(0)
            sizePolicy.setVerticalStretch(0)
            sizePolicy.setHeightForWidth(self.dateEdit.sizePolicy().hasHeightForWidth())
            self.dateEdit.setSizePolicy(sizePolicy)
            font = QtGui.QFont()
            font.setPointSize(13)
            self.dateEdit.setFont(font)
            self.dateEdit.setObjectName("dateEdit")
            self.horizontalLayout_2.addWidget(self.dateEdit)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            self.layoutWidget2 = QtWidgets.QWidget(self.centralwidget)
            self.layoutWidget2.setGeometry(QtCore.QRect(200, 40, 321, 41))
            self.layoutWidget2.setObjectName("layoutWidget2")
            self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.layoutWidget2)
            self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
            self.horizontalLayout_4.setSpacing(20)
            self.horizontalLayout_4.setObjectName("horizontalLayout_4")
            self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget2)
            self.pushButton_3.setObjectName("pushButton_3")
            self.horizontalLayout_4.addWidget(self.pushButton_3)
            self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget2)
            self.pushButton_4.setObjectName("pushButton_4")
            self.horizontalLayout_4.addWidget(self.pushButton_4)
            self.pushButton_5 = QtWidgets.QPushButton(self.layoutWidget2)
            self.pushButton_5.setObjectName("pushButton_5")
            self.horizontalLayout_4.addWidget(self.pushButton_5)
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "操作界面"))
            item = self.tableWidget.verticalHeaderItem(0)
            item.setText(_translate("MainWindow", "1"))
            item = self.tableWidget.verticalHeaderItem(1)
            item.setText(_translate("MainWindow", "2"))
            item = self.tableWidget.verticalHeaderItem(2)
            item.setText(_translate("MainWindow", "3"))
            item = self.tableWidget.verticalHeaderItem(3)
            item.setText(_translate("MainWindow", "4"))
            item = self.tableWidget.verticalHeaderItem(4)
            item.setText(_translate("MainWindow", "5"))
            item = self.tableWidget.verticalHeaderItem(5)
            item.setText(_translate("MainWindow", "6"))
            item = self.tableWidget.verticalHeaderItem(6)
            item.setText(_translate("MainWindow", "7"))
            item = self.tableWidget.verticalHeaderItem(7)
            item.setText(_translate("MainWindow", "8"))
            item = self.tableWidget.verticalHeaderItem(8)
            item.setText(_translate("MainWindow", "9"))
            item = self.tableWidget.horizontalHeaderItem(0)
            item.setText(_translate("MainWindow", "航班号"))
            item = self.tableWidget.horizontalHeaderItem(1)
            item.setText(_translate("MainWindow", "起点"))
            item = self.tableWidget.horizontalHeaderItem(2)
            item.setText(_translate("MainWindow", "终点"))
            item = self.tableWidget.horizontalHeaderItem(3)
            item.setText(_translate("MainWindow", "日期"))
            item = self.tableWidget.horizontalHeaderItem(4)
            item.setText(_translate("MainWindow", "起飞时刻"))
            item = self.tableWidget.horizontalHeaderItem(5)
            item.setText(_translate("MainWindow", "到达时刻"))
            item = self.tableWidget.horizontalHeaderItem(6)
            item.setText(_translate("MainWindow", "票价"))
            item = self.tableWidget.horizontalHeaderItem(7)
            item.setText(_translate("MainWindow", "折扣票数"))
            item = self.tableWidget.horizontalHeaderItem(8)
            item.setText(_translate("MainWindow", "剩余座位数"))
            item = self.tableWidget.horizontalHeaderItem(9)
            item.setText(_translate("MainWindow", "折扣率"))
            item = self.tableWidget.horizontalHeaderItem(10)
            item.setText(_translate("MainWindow", "航班所属航空公司"))
            self.pushButton.setText(_translate("MainWindow", "查询"))
            self.exitButton.setText(_translate("MainWindow", "退出"))
            self.label.setText(_translate("MainWindow", "航班号"))
            self.label_2.setText(_translate("MainWindow", "日期"))
            self.pushButton_3.setText(_translate("MainWindow", "增加"))
            self.pushButton_4.setText(_translate("MainWindow", "修改"))
            self.pushButton_5.setText(_translate("MainWindow", "删除"))
    

    逻辑代码 app.py

    在这里插入图片描述
    将以上的界面代码 与 下面的逻辑代码放在一个文件下就可以运行啦!(需要 PyQt 环境)
    环境安装可以看这个:【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面

    import sys
    from PyQt5 import QtCore, QtWidgets, QtCore
    import pymysql
    
    from hello import Ui_MainWindow as Hello_Ui 
    from login import Ui_MainWindow as Login_Ui
    from operate import Ui_MainWindow as Operate_Ui
    
    # 主窗口
    class HelloWindow(QtWidgets.QMainWindow, Hello_Ui):
        switch_window1 = QtCore.pyqtSignal()
        switch_window2 = QtCore.pyqtSignal()
        def __init__(self):
            super(HelloWindow, self).__init__()
            self.setupUi(self)
            self.queryButton.clicked.connect(self.goOperate)
            self.manageButton.clicked.connect(self.goLogin)
        def goLogin(self):
            self.switch_window1.emit()
        def goOperate(self):
            self.switch_window2.emit()
    
    # 登录窗口
    class LoginWindow(QtWidgets.QMainWindow, Login_Ui):
        switch_window1 = QtCore.pyqtSignal()
        switch_window2 = QtCore.pyqtSignal()
        def __init__(self):
            super(LoginWindow, self).__init__()
            self.setupUi(self)
            self.okButton.clicked.connect(self.ok)
            self.cancelButton.clicked.connect(self.cancel)
            
    
        def ok(self):
            username = self.userText.text()
            password = self.pwdText.text()
            # 创建数据库连接
            conn = pymysql.connect(
                host = '127.0.0.1', # 连接主机, 默认127.0.0.1 
                user = 'root',      # 用户名
                passwd = '1234',    # 密码
                port = 3306,        # 端口,默认为3306
                db = 'sxn210224',   # 数据库名称
                charset = 'utf8'    # 字符编码
            )
            # 生成游标对象 cursor
            cursor = conn.cursor()
            if (cursor.execute("SELECT * FROM user WHERE u_username='%s' AND u_password='%s'" %(username, password))): 
                self.switch_window1.emit()
            else:
                print("密码错误!!")
            cursor.close()
            conn.close()
    
        def cancel(self):
            self.switch_window2.emit()
        
    # 操作窗口
    class OperateWindow(QtWidgets.QMainWindow, Operate_Ui):
        def __init__(self):
            super(OperateWindow, self).__init__()
            self.setupUi(self)
            self.exitButton.clicked.connect(self.exit)
    
             # 数据库连接对象
            conn = pymysql.connect(host='localhost', port=3306, user='root', password="1234", db="sxn210224")
            # 游标对象
            cur = conn.cursor()
            
            # 查询的sql语句
            sql = "SELECT * FROM flight"
            cur.execute(sql)
            # 获取查询到的数据, 是以二维元组的形式存储的, 所以读取需要使用 data[i][j] 下标定位
            data = cur.fetchall()
            # 打印测试
            print(data)
    
            # 遍历二维元组, 将 id 和 name 显示到界面表格上
            x = 0
            for i in data:
                y = 0
                for j in i:
                    self.tableWidget.setItem(x, y, QtWidgets.QTableWidgetItem(str(data[x][y])))
                    y = y + 1
                x = x + 1
    
            cur.close()
            conn.close()
        
        def exit(self):
            sys.exit(0)
    
    
    # 利用一个控制器来控制页面的跳转
    class Controller:
        def __init__(self):
            self.hello = HelloWindow()
            self.login = LoginWindow()
            self.operate = OperateWindow()
        def show_hello(self):
            self.hello = HelloWindow()
            self.hello.switch_window1.connect(self.show_login)
            self.hello.switch_window2.connect(self.show_operate)
            self.hello.show()
            self.login.close()
            self.operate.close()
        def show_login(self):
            self.login = LoginWindow()
            self.login.switch_window1.connect(self.show_operate)
            self.login.switch_window2.connect(self.show_hello)
            self.login.show()
            self.hello.close()
            self.operate.close()
        def show_operate(self):
            self.operate = OperateWindow()
            self.operate.show()
            self.hello.close()
            self.login.close()
    
    def main():
        app = QtWidgets.QApplication(sys.argv)
        controller = Controller()
        controller.show_hello()
        sys.exit(app.exec_())
    
    if __name__ == '__main__':
        main()
    

    项目演示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 使用Python和PyQt5开发的瑞幸咖啡点餐系统,代码可以实现基本的点餐、结算、打印小票、增删操作。
  • PyQt5开发环境搭建

    2021-02-23 14:44:10
    PyQt5开发环境搭建 一,什么是PyQt5? PyQt是一个创建python GUI应用程序的工具包,是C++的Qt和python结合的一个产物,PyQt5是一个基于Qt5的python语言的实现,是由一组python模块构成的。PyQt5从结构上可以看成是三...

    PyQt5开发环境搭建

    一,什么是PyQt5?

    PyQt是一个创建python GUI应用程序的工具包,是C++的Qt和python结合的一个产物,PyQt5是一个基于Qt5的python语言的实现,是由一组python模块构成的。PyQt5从结构上可以看成是三大部分组成,一是Qt Designer,中文称为Qt设计师,这是一个图形界面开发工具,二是将图形界面相关资源转换成python语言的工具,包括PyUIC和PyRcc,三是PyQt类库。

    二,PyQt5三大组成系统

    PyQt5安装时,需要三个安装包,分别是PyQt5-sip,PyQt5,PyQt5-tools,也就是说PyQt5整体由这三大部分组成

    三,开发环境安装步骤(必须遵循安装顺序,否则会出错)

    1.安装PyQt5-sip(可以与C和C++交互),命令如下:

    pip install –user sip -i https://pypi.douban.com/simple

    2.安装PyQt5(Qt各个类的python模块),命令如下:

    pip install PyQt5 -i https://pypi.douban.com/simple

    3.安装PyQt5-tools(主要包括Qt Designer,PyUIC,PyRcc),命令如下:

    pip install PyQt5-tools -i https://pypi.douban.com/simple

    4.查看是否安装成功

    执行pip list,显示如下及说明安装成功

    在这里插入图片描述

    四,在pycharm中集成PyQt5开发环境

    1.打开pycharm,通过菜单路径:File——settings进入设置界面,在设置界面选择菜单路径:tools——external tools进入外部工具配置界面

    在这里插入图片描述

    2.Qt Designer配置信息
    在这里插入图片描述

    搜索自己PC的designer.exe路径
    3.PyUIC配置信息
    在这里插入图片描述

    arguments:-m PyQt5.uic.pyuic FileNameFileName -o FileNameWithoutExtensionFileNameWithoutExtension.py
    4.PyRcc配置信息

    在这里插入图片描述

    arguments:FileNameFileName -o FileNameWithoutExtensionFileNameWithoutExtension_rc.py
    根据自己本地PC的实际路径选择集成路径

    五,启动Qt Designer

    在这里插入图片描述

    集成成功显示三个工具
    在这里插入图片描述

    启动成功,进入开发界面
    以上为PyQt5+pycharm开发环境集成与搭建过程,具体的界面开发过程后续补充,此文仅供环境搭建时参考

    展开全文
  • 文章目录安装python3安装PyQt5PyQt5-tools测试是否安装成功 安装python3 首先登陆python官网<u>https://www.python.org/downloads/release/python-372/</u>下载python安装程序。 ...

    安装python3

    首先登陆python官网<u>https://www.python.org/downloads/release/python-372/</u>下载python安装程序。
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    安装PyQt5和PyQt5-tools

    由于并未添加Scripts目录至环境变量,所以pip3命令不是在任何路径下都能够使用的,进入python的安装目录Scripts下,新建git bash here
    

    在这里插入图片描述

    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ PyQt5
    在这里插入图片描述

    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ PyQt5-tools
    在这里插入图片描述

    测试是否安装成功

    以上步骤完成后,Scripts目录下新增了许多文件,找到designer.exe,并将其打开,将该文件生成桌面快捷方式,方便日后制作.ui文件。
    

    在这里插入图片描述

    展开全文
  • from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import QPalette, QBrush, QPixmap, QIcon import os import nump...
  • PyQt5 开发环境搭建

    2018-08-18 10:00:58
    系统环境:win7 64位: 下载安装python: python-3.5.2 ...#安装时注意要勾选“Add Python 3.5 to Path” 下载安装pyqt5: PyQt5-5.6 https://sourceforge.net/projects/pyqt/fi...
  • pycharm+pyqt5开发GUI

    千次阅读 2017-12-01 10:11:54
    一、必备 (1)安装pyqt5pyqt5-tools  pip install pyqt5  pip install pyqt5-tools ...PyQt5安装完后,需要修改系统变量 QT_QPA_PLATFORM_PLUGIN_PATH D:\Program Files\Anaconda\Lib\site-packages\p
  • Python Gui编程-PyQt5开发与实战

    千人学习 2020-04-01 12:53:38
    本门课程需要有python基础,从零基础带大家学习pyhon gui 编程,从界面设计到 初级控件,高级控件,信号和槽,事件,数据库,pyqt matplotlib来学习pyqt5.非常丰富的项目实战案例,股票看板,视频播放器,音乐播放器员工管理...
  • 树莓派3b+ 系统安装和python3.5+ PyQt5开发环境搭建 系统安装 参考https://blog.csdn.net/weixin_39449466/article/details/80686835安装系统, 我使用16G TF卡安装系统,尝试过8G 老卡失败 环境:Windows7 写卡软件...
  • 主要介绍了python GUI库图形界面开发PyQt5访问系统剪切板QClipboard类详细使用方法与实例,需要的朋友可以参考下
  • PyQt5开发学习(一)--在Pycharm使用PyQt5

    千次阅读 2019-01-27 01:26:01
    安装PyQt5 PyCharm对每个工程,都有独立的系统环境,工程需要的每个库,都可以安装在工程目录下,而不是安装在系统目录下。 如果安装太慢,可以更改PIP的源,如下: 清华: ...
  • 基于PyQt5开发的前后端GUI桌面、导航定位与测量综合系统软件 一、背景与说明 (一)应用场景 当前框架已经实现了多场景的复用测试,有如下: 1. 2.导航定位与测量综合系统(GNSSAMS Offcial X version) 3.基于YOLO3...
  • win10 搭建PyQt5 开发环境

    千次阅读 2018-01-30 17:19:00
    win10 搭建PyQt5 开发环境 在win10 系统上安装python3.6 版本,https://www.python.org/downloads/ 到官网上直接下载,安装到C:\Python36 目录下,并将python.exe改成python3.exe,将目录 C:\Python36 加入到环境...
  • 也可以直接加入QQ的PyQt5开发高级群(592588163) 联系笔者,2位笔者白天都在群里。 路漫漫其修远兮,吾将上下而求索。在读者的不断求索中,能够与本书相遇也是一种缘分,如果读者能够从本书中获取自己想要的东西,那...
  • UI 开发环境:win10 + vscode + python 3.7 + pyQt5 移植到树莓派 将py文件直接copy到树莓派运行,报错提示没有安装pyqt5 树莓派安装pyqt5,很简单 sudo apt-get install python3-pyqt5 之后再运行,就可以正常显示...
  • 1.下载安装PyQt 笔者环境  操作系统: win7 64位  PyCharm: 2018.2.3  Python: 3.6.3  PyQt : 5.8.2  pyqt5-tools:5.11.2.1.3  pyinstaller:3.3.1 ... pip install PyQt5==5.8.2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 437
精华内容 174
关键字:

pyqt5开发系统