用python制作的软件3-后端小功能实现和打包

在前一章节我们已经将前端页面设计好并转换成py代码了,(具体可见上一篇用python制作的软件2-qt前端页面设计
接下来主要讲一下前后端的交互,以及打包。

先捋一下思路


我主要是建了3个py文件。

第一个是ui.py,即我们在前一章设计的前端页面转换的文件,所有前端的设置、功能等都在这里
第二个是token.py,这是我的主进程要用的方法,这个文件的目的只有一个,就是接收前端传来的参数,再把转换的token return出来,后端处理主要的逻辑都在这里
第三个是main.py,我在这个文件里创建程序对象,继承界面,处理主进程,没有过多的逻辑,目的就是调用

详细讲一下各个文件

第二个文件
第二个文件token.py涉及到公司的一些逻辑,恕不能详讲,我这里就是定义了一个方法来接收前端输入的值,对合法性判断,再通过处理最后返回处理结果。

第三个文件
第三个文件main.py首先是定义一个类,来继承前端的界面类。继承以后,需要初始化。需要先把第一个文件导进来

from PyQt5 import  QtWidgets  # 调用界面用到的库
from ui import Ui_MainWindow  # 界面

class mywindow(QtWidgets.QWidget, Ui_MainWindow):  # 继承  Ui_MainWindow界面类
    def __init__(self):
        super(mywindow, self).__init__()  # 初始化父类
        self.setupUi(self)  # 继承 Ui_MainWindow 基础类
        self.retranslateUi(self)  # 继承 Ui_MainWindow 界面类

主进程是由第二个文件处理的,导完包可以直接调用。

    # 主进程处理
    def tokenprocess(self):
        self.textEdit.setText(token( self.lineEdit.text()))

这段代码定义主进程方法,待会在前端代码里等用户输入完成,点击查询时即调用。
传入token方法的参数是通过lineEdit(输入框的)的text()方法拿到的。

前面第二章节页面设计的时候,还做了一个复制按钮,就是想在查出来token时,用户点击一下复制,即将查询结果复制在系统的粘贴板,用户可以直接使用,

import sys
# 复制到粘贴板功能
def copyText(self):
    clipboard = QtWidgets.QApplication.clipboard()
    clipboard.setText(self.textEdit.toPlainText()) #把结果复制到粘贴板

textEdit是第二节的输入框对象,用toPlainText()方法实现获取文本框里面的内容
以下是第三个文件完整代码

import sys
from tokenUIV2 import Ui_MainWindow  # 界面
from xxxToken import token #接口获取token
from PyQt5 import  QtWidgets  # 调用界面用到的库


class mywindow(QtWidgets.QWidget, Ui_MainWindow):  # 继承  Ui_MainWindow界面类
    def __init__(self):
        super(mywindow, self).__init__()  # 初始化父类
        self.setupUi(self)  # 继承 Ui_MainWindow 基础类
        self.retranslateUi(self)  # 继承 Ui_MainWindow 界面类

    # 主进程处理
    def tokenprocess(self):
        self.textEdit.setText(token( self.lineEdit.text()))

    # 复制到粘贴板功能
    def copyText(self):
        clipboard = QtWidgets.QApplication.clipboard()
        clipboard.setText(self.textEdit.toPlainText()) #把结果复制到粘贴板

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  # 创建应用程序对象
    ui = mywindow()
    ui.show()
    sys.exit(app.exec_())

第一个文件
最后再来处理一下第一个文件ui.py
1.在第一个文件的setupUi方法里可以看到之前我们写的关闭和清空功能,程序帮我们自动生成了两行代码

  self.pushButton_4.clicked.connect(MainWindow.close) #点关闭时关闭窗口
  self.pushButton_3.clicked.connect(self.lineEdit.clear) #点清空时清空输入框

在第三个文件里,我们定义了tokenprocess方法来执行主进程。
所以在后面需要新增一条,即可实现调用

self.pushButton.clicked.connect(MainWindow.tokenprocess)   #在点确认时调用主程序

2.需要把 MainWindow.setCentralWidget(self.centralwidget)等所有MainWindow开头的注释掉否则会报错
在这里插入图片描述

以下是第一个文件完整代码

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(436, 548)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(60, 180, 121, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(60, 140, 161, 21))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(210, 180, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(310, 380, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(60, 240, 54, 12))
        self.label_2.setObjectName("label_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(310, 180, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(60, 270, 221, 201))
        self.textEdit.setObjectName("textEdit")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(310, 440, 75, 23))
        self.pushButton_4.setObjectName("pushButton_4")
        # MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 436, 23))
        self.menubar.setObjectName("menubar")
        # MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        self.retranslateUi(MainWindow)
        self.pushButton_4.clicked.connect(MainWindow.close) #点关闭时关闭窗口
        self.pushButton_3.clicked.connect(self.lineEdit.clear) #点清空时清空输入框
        self.pushButton.clicked.connect(MainWindow.tokenprocess)   #在点确认时调用主程序
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "token生成器"))
        self.lineEdit.setText(_translate("MainWindow", "00000000"))
        self.label.setText(_translate("MainWindow", "请输入需要生成token的工号:"))
        self.pushButton.setText(_translate("MainWindow", "确认"))
        self.pushButton_2.setText(_translate("MainWindow", "复制"))
        self.label_2.setText(_translate("MainWindow", "执行结果:"))
        self.pushButton_3.setText(_translate("MainWindow", "清空"))
        self.textEdit.setHtml(
            _translate(
                "MainWindow",
                '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n'
                '<html><head><meta name="qrichtext" content="1" /><style type="text/css">\n'
                "p, li { white-space: pre-wrap; }\n"
                "</style></head><body style=\" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
                '<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>',
            )
        )
        self.pushButton_4.setText(_translate("MainWindow", "关闭"))

至此代码部分就完成了,接下来是打包。

打包程序

先装一个插件

pip install pyinstaller

装好可以直接在控制台输入

pyinstaller -F main.py

在这里插入图片描述
执行后在dist目录下生成了exe文件。
在这里插入图片描述
双击打开试用一下
在这里插入图片描述
测试了没什么问题发给开发了。。还记得当时想写这个就是想以后请假时他们不要找我。
完成这篇时已经过了一个月了,基本没再找过我了。。
我想了下,其实还可以做点别的,比如加一个图标,加一个背景之类的…待续…
在这里插入图片描述

好文分享

下面是我在完成以上内容参考的文档。
大家如果遇到问题也可以在以下文档中找找答案!同时谢谢下面的作者!!

Python制作小软件——2. 实现界面中的退出功能
python从入门到精通——GUI编程
python:使用PyInstaller打包成exe文件,以及TypeError: an integer is required (got type bytes)异常解决

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值