文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pyqt5界面与逻辑分离的小计算器程序怎么使用

2023-07-05 04:21

关注

这篇文章主要介绍了Pyqt5界面与逻辑分离的小计算器程序怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pyqt5界面与逻辑分离的小计算器程序怎么使用文章都会有所收获,下面我们一起来看看吧。

直接看下最终效果:

Pyqt5界面与逻辑分离的小计算器程序怎么使用

使用技术总结

使用Designer设计界面

要使用Designer,安装一个Python库即可:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5 pyqt5-tools

我用的是python 3.9版本,发现3.10会报错,3.9没问题

Pyqt5界面与逻辑分离的小计算器程序怎么使用

在此过程中,用到了如下组件:

然后保存成ui文件

使用pyuic5将ui文件导出成python文件

Pyqt5界面与逻辑分离的小计算器程序怎么使用

然后执行如下命令:

pyuic5 -o computer.py computer.ui

即可生成computer.py

为什么要用界面与逻辑分离

主要是用Designer设计的界面,肯定要多次调整的。如果每次调整后,生成新的py文件,就会把自己写的代码给覆盖了。

因此,最好是界面的ui生成的python代码,和自己的分离。

用继承机制就可以:

先看下pyuic5生成的代码文件(如下代码是自动生成的,不用多看):

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'computer.ui'## Created by: PyQt5 UI code generator 5.15.4## WARNING: Any manual changes made to this file will be lost when pyuic5 is# run again.  Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object):    def setupUi(self, Form):        Form.setObjectName("Form")        Form.resize(1006, 577)        self.verticalLayout = QtWidgets.QVBoxLayout(Form)        self.verticalLayout.setObjectName("verticalLayout")        self.horizontalLayout = QtWidgets.QHBoxLayout()        self.horizontalLayout.setObjectName("horizontalLayout")        self.label = QtWidgets.QLabel(Form)        self.label.setObjectName("label")        self.horizontalLayout.addWidget(self.label)        self.lineEdit_num01 = QtWidgets.QLineEdit(Form)        self.lineEdit_num01.setObjectName("lineEdit_num01")        self.horizontalLayout.addWidget(self.lineEdit_num01)        self.verticalLayout.addLayout(self.horizontalLayout)        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()        self.horizontalLayout_2.setObjectName("horizontalLayout_2")        self.label_2 = QtWidgets.QLabel(Form)        self.label_2.setObjectName("label_2")        self.horizontalLayout_2.addWidget(self.label_2)        self.lineEdit_num02 = QtWidgets.QLineEdit(Form)        self.lineEdit_num02.setObjectName("lineEdit_num02")        self.horizontalLayout_2.addWidget(self.lineEdit_num02)        self.verticalLayout.addLayout(self.horizontalLayout_2)        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)        self.verticalLayout.addItem(spacerItem)        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()        self.horizontalLayout_3.setObjectName("horizontalLayout_3")        self.pushButton_add = QtWidgets.QPushButton(Form)        self.pushButton_add.setObjectName("pushButton_add")        self.horizontalLayout_3.addWidget(self.pushButton_add)        self.pushButton_minus = QtWidgets.QPushButton(Form)        self.pushButton_minus.setObjectName("pushButton_minus")        self.horizontalLayout_3.addWidget(self.pushButton_minus)        self.pushButton_multi = QtWidgets.QPushButton(Form)        self.pushButton_multi.setObjectName("pushButton_multi")        self.horizontalLayout_3.addWidget(self.pushButton_multi)        self.pushButton_divide = QtWidgets.QPushButton(Form)        self.pushButton_divide.setObjectName("pushButton_divide")        self.horizontalLayout_3.addWidget(self.pushButton_divide)        self.verticalLayout.addLayout(self.horizontalLayout_3)        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)        self.verticalLayout.addItem(spacerItem1)        self.label_result = QtWidgets.QLabel(Form)        font = QtGui.QFont()        font.setPointSize(18)        self.label_result.setFont(font)        self.label_result.setStyleSheet("QLabel{\n""color:red;\n""}")        self.label_result.setText("")        self.label_result.setObjectName("label_result")        self.verticalLayout.addWidget(self.label_result)         self.retranslateUi(Form)        QtCore.QMetaObject.connectSlotsByName(Form)     def retranslateUi(self, Form):        _translate = QtCore.QCoreApplication.translate        Form.setWindowTitle(_translate("Form", "Form"))        self.label.setText(_translate("Form", "请输入第一个数字:"))        self.label_2.setText(_translate("Form", "请输入第二个数字:"))        self.pushButton_add.setText(_translate("Form", "+"))        self.pushButton_minus.setText(_translate("Form", "-"))        self.pushButton_multi.setText(_translate("Form", "*"))        self.pushButton_divide.setText(_translate("Form", "/"))

在里面有个类,叫做:Ui_Form

我们可以继承这个类,然后编写编写自己的逻辑即可

import sys from computer import Ui_Formfrom PyQt5.QtWidgets import QApplication, QWidget class MyUiComputer(Ui_Form):    def __init__(self, window):        super().__init__()        self.setupUi(window)        self.pushButton_add.clicked.connect(self.do_compute("+"))        self.pushButton_minus.clicked.connect(self.do_compute("-"))        self.pushButton_multi.clicked.connect(self.do_compute("*"))        self.pushButton_divide.clicked.connect(self.do_compute("/"))     def do_compute(self, method):        def func():            try:                num01 = self.lineEdit_num01.text()                num02 = self.lineEdit_num02.text()                if method == "+":                    self.label_result.setText("计算结果:" + str(int(num01) + int(num02)))                elif method == "-":                    self.label_result.setText("计算结果:" + str(int(num01) - int(num02)))                elif method == "*":                    self.label_result.setText("计算结果:" + str(int(num01) * int(num02)))                elif method == "/":                    self.label_result.setText("计算结果:" + str(int(num01) / int(num02)))            except Exception as e:                self.label_result.setText(f"error: {e}")         return func if __name__ == "__main__":    app = QApplication(sys.argv)     window = QWidget()     my_ui_computer = MyUiComputer(window)    window.show()     sys.exit(app.exec_())

这是我们自己的代码,有几点:

需要自己初始化 QWidget 作为入口窗口 然后调用pyuic5生成代码中的 self.setupUi(window) 设置主窗口;

这个代码主要是编写自己的信号与槽的链接

这个代码也有一个知识,connect的槽函数,是可以传参数的,技巧就是自己的函数返回一个函数 见do_compute函数

关于“Pyqt5界面与逻辑分离的小计算器程序怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Pyqt5界面与逻辑分离的小计算器程序怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯