。。。
初学pyqt5,界面比较简陋,逻辑处理上也是自己一步一步的整理的,所以看着会比较乱,可能存在bug,可以在评论告知一下。
内容不够严谨,仅供参考!
代码
pyqt5的designer设计GUI界面
ui–>py代码
ui转译为py后的代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'widget.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# 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(400, 520)
Form.setMinimumSize(QtCore.QSize(400, 520))
Form.setMaximumSize(QtCore.QSize(500, 650))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/img/images/btn_gold.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
Form.setWindowIcon(icon)
self.verticalLayout_3 = QtWidgets.QVBoxLayout(Form)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.groupBox_3 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_3.setTitle("")
self.groupBox_3.setObjectName("groupBox_3")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_3)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.textEdit = QtWidgets.QTextEdit(self.groupBox_3)
self.textEdit.setEnabled(False)
self.textEdit.setMinimumSize(QtCore.QSize(250, 100))
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(True)
font.setWeight(75)
font.setKerning(True)
self.textEdit.setFont(font)
self.textEdit.setObjectName("textEdit")
self.verticalLayout_4.addWidget(self.textEdit)
self.verticalLayout.addWidget(self.groupBox_3)
self.groupBox_4 = QtWidgets.QGroupBox(self.groupBox)
self.groupBox_4.setTitle("")
self.groupBox_4.setObjectName("groupBox_4")
self.gridLayout = QtWidgets.QGridLayout(self.groupBox_4)
self.gridLayout.setObjectName("gridLayout")
self.btn_cls = QtWidgets.QPushButton(self.groupBox_4)
self.btn_cls.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_cls.setFont(font)
self.btn_cls.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_cls.setObjectName("btn_cls")
self.gridLayout.addWidget(self.btn_cls, 0, 0, 1, 1)
self.btn_back_space = QtWidgets.QPushButton(self.groupBox_4)
self.btn_back_space.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_back_space.setFont(font)
self.btn_back_space.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_back_space.setObjectName("btn_back_space")
self.gridLayout.addWidget(self.btn_back_space, 0, 1, 1, 1)
self.btn_cf = QtWidgets.QPushButton(self.groupBox_4)
self.btn_cf.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_cf.setFont(font)
self.btn_cf.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_cf.setObjectName("btn_cf")
self.gridLayout.addWidget(self.btn_cf, 0, 2, 1, 1)
self.btn_kf = QtWidgets.QPushButton(self.groupBox_4)
self.btn_kf.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_kf.setFont(font)
self.btn_kf.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_kf.setObjectName("btn_kf")
self.gridLayout.addWidget(self.btn_kf, 0, 3, 1, 1)
self.btn_7 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_7.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_7.setFont(font)
self.btn_7.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_7.setObjectName("btn_7")
self.gridLayout.addWidget(self.btn_7, 1, 0, 1, 1)
self.btn_8 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_8.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_8.setFont(font)
self.btn_8.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_8.setObjectName("btn_8")
self.gridLayout.addWidget(self.btn_8, 1, 1, 1, 1)
self.btn_9 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_9.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_9.setFont(font)
self.btn_9.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_9.setObjectName("btn_9")
self.gridLayout.addWidget(self.btn_9, 1, 2, 1, 1)
self.btn_multiply = QtWidgets.QPushButton(self.groupBox_4)
self.btn_multiply.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_multiply.setFont(font)
self.btn_multiply.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_multiply.setObjectName("btn_multiply")
self.gridLayout.addWidget(self.btn_multiply, 1, 3, 1, 1)
self.btn_4 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_4.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_4.setFont(font)
self.btn_4.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_4.setObjectName("btn_4")
self.gridLayout.addWidget(self.btn_4, 2, 0, 1, 1)
self.btn_5 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_5.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_5.setFont(font)
self.btn_5.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_5.setObjectName("btn_5")
self.gridLayout.addWidget(self.btn_5, 2, 1, 1, 1)
self.btn_6 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_6.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_6.setFont(font)
self.btn_6.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_6.setObjectName("btn_6")
self.gridLayout.addWidget(self.btn_6, 2, 2, 1, 1)
self.btn_divide = QtWidgets.QPushButton(self.groupBox_4)
self.btn_divide.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_divide.setFont(font)
self.btn_divide.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_divide.setObjectName("btn_divide")
self.gridLayout.addWidget(self.btn_divide, 2, 3, 1, 1)
self.btn_1 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_1.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_1.setFont(font)
self.btn_1.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_1.setObjectName("btn_1")
self.gridLayout.addWidget(self.btn_1, 3, 0, 1, 1)
self.btn_2 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_2.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_2.setFont(font)
self.btn_2.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_2.setObjectName("btn_2")
self.gridLayout.addWidget(self.btn_2, 3, 1, 1, 1)
self.btn_3 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_3.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_3.setFont(font)
self.btn_3.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_3.setObjectName("btn_3")
self.gridLayout.addWidget(self.btn_3, 3, 2, 1, 1)
self.btn_add = QtWidgets.QPushButton(self.groupBox_4)
self.btn_add.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_add.setFont(font)
self.btn_add.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_add.setObjectName("btn_add")
self.gridLayout.addWidget(self.btn_add, 3, 3, 1, 1)
self.btn_0 = QtWidgets.QPushButton(self.groupBox_4)
self.btn_0.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_0.setFont(font)
self.btn_0.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_0.setObjectName("btn_0")
self.gridLayout.addWidget(self.btn_0, 4, 0, 1, 1)
self.btn_point = QtWidgets.QPushButton(self.groupBox_4)
self.btn_point.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_point.setFont(font)
self.btn_point.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_point.setObjectName("btn_point")
self.gridLayout.addWidget(self.btn_point, 4, 1, 1, 1)
self.btn_dy = QtWidgets.QPushButton(self.groupBox_4)
self.btn_dy.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_dy.setFont(font)
self.btn_dy.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_dy.setObjectName("btn_dy")
self.gridLayout.addWidget(self.btn_dy, 4, 2, 1, 1)
self.btn_sub = QtWidgets.QPushButton(self.groupBox_4)
self.btn_sub.setMinimumSize(QtCore.QSize(40, 40))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.btn_sub.setFont(font)
self.btn_sub.setStyleSheet("image:url(:/img/images/btn.png);\n"
"border: none;\n"
"color:rgb(255, 255, 255)")
self.btn_sub.setObjectName("btn_sub")
self.gridLayout.addWidget(self.btn_sub, 4, 3, 1, 1)
self.verticalLayout.addWidget(self.groupBox_4)
self.verticalLayout.setStretch(0, 1)
self.verticalLayout.setStretch(1, 2)
self.verticalLayout_2.addLayout(self.verticalLayout)
self.verticalLayout_3.addWidget(self.groupBox)
self.verticalLayout_3.setStretch(0, 3)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "简易计算器"))
self.textEdit.setMarkdown(_translate("Form", "**0**\n"
"\n"
""))
self.textEdit.setHtml(_translate("Form", "<!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:16pt; font-weight:600; font-style:normal;\">\n"
"<p style=\" margin-top:6px; margin-bottom:6px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">0</p></body></html>"))
self.btn_cls.setText(_translate("Form", "CLS"))
self.btn_back_space.setText(_translate("Form", "del"))
self.btn_cf.setText(_translate("Form", "^"))
self.btn_kf.setText(_translate("Form", "√"))
self.btn_7.setText(_translate("Form", "7"))
self.btn_8.setText(_translate("Form", "8"))
self.btn_9.setText(_translate("Form", "9"))
self.btn_multiply.setText(_translate("Form", "*"))
self.btn_4.setText(_translate("Form", "4"))
self.btn_5.setText(_translate("Form", "5"))
self.btn_6.setText(_translate("Form", "6"))
self.btn_divide.setText(_translate("Form", "/"))
self.btn_1.setText(_translate("Form", "1"))
self.btn_2.setText(_translate("Form", "2"))
self.btn_3.setText(_translate("Form", "3"))
self.btn_add.setText(_translate("Form", "+"))
self.btn_0.setText(_translate("Form", "0"))
self.btn_point.setText(_translate("Form", "."))
self.btn_dy.setText(_translate("Form", "="))
self.btn_sub.setText(_translate("Form", "-"))
import res_rc #图片等资源编译为py的文件
逻辑处理代码
# @Author:clc
# @Time:2020-12-22 19:46
# @File:myWidget.py.py
import sys
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QApplication, QWidget
from com_qss import CommonHelper
from upy.ui_widget import Ui_Form
class MyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.textEdit.moveCursor(QTextCursor.End) # 光标移到最末尾
self.solt_connect()
def solt_connect(self):
self.ui.btn_0.clicked.connect(self.set_data)
self.ui.btn_1.clicked.connect(self.set_data)
self.ui.btn_2.clicked.connect(self.set_data)
self.ui.btn_3.clicked.connect(self.set_data)
self.ui.btn_4.clicked.connect(self.set_data)
self.ui.btn_5.clicked.connect(self.set_data)
self.ui.btn_6.clicked.connect(self.set_data)
self.ui.btn_7.clicked.connect(self.set_data)
self.ui.btn_8.clicked.connect(self.set_data)
self.ui.btn_9.clicked.connect(self.set_data)
self.ui.btn_point.clicked.connect(self.set_data)
self.ui.btn_cf.clicked.connect(self.set_data) # 乘方
self.ui.btn_kf.clicked.connect(self.set_data) # 开方
self.ui.btn_add.clicked.connect(self.set_data) # +
self.ui.btn_sub.clicked.connect(self.set_data) # -
self.ui.btn_multiply.clicked.connect(self.set_data) # *
self.ui.btn_divide.clicked.connect(self.set_data) # /
self.ui.btn_dy.clicked.connect(self.set_data) # =
self.ui.btn_cls.clicked.connect(self.set_cls) # cls,归零
self.ui.btn_back_space.clicked.connect(self.back_space) # <--
def set_data(self):
data = self.sender().text()
if data in [str(i) for i in range(10)]:
self.is_zero_start()
self.ui.textEdit.insertPlainText(data)
self.ui.textEdit.moveCursor(QTextCursor.End)
elif data == '.':
self.is_zero_start()
is_add = self.is_have_point()
if is_add == 1: # 当前数值没有小数点,可加入
self.ui.textEdit.insertPlainText(data)
self.ui.textEdit.moveCursor(QTextCursor.End)
elif is_add == 0: # 已有小数点,不做处理
pass
else: # 没有任何值,输入小数点前先加0 --> 0.
self.ui.textEdit.insertPlainText('0' + data)
self.ui.textEdit.moveCursor(QTextCursor.End)
elif data in ['*', '/', '+', '-', '^', '√']:
is_con = self.jisuan()
if is_con:
self.ui.textEdit.append(data)
self.ui.textEdit.append('')
self.ui.textEdit.moveCursor(QTextCursor.End)
elif data == '=':
self.jisuan()
def is_have_point(self):
# 判断是否能输入小数点
text = self.ui.textEdit.toPlainText()
print('text', text)
data_list = text.split('\n')
end_row = data_list[-1]
if end_row:
if '.' in end_row:
return 0
else:
return 1
else:
return 2
def set_cls(self):
# 归零,清除全部,设值为0
self.ui.textEdit.clear()
self.ui.textEdit.append(str(0))
def back_space(self):
# 删除最后的字符
all_str = self.ui.textEdit.toPlainText()
if all_str[-1] == '\n': # 以换行结尾则不做处理
return
cursor = self.ui.textEdit.textCursor()
cursor.deletePreviousChar()
def is_zero_start(self):
# 输入数值时判断是否是0开头,如果是,则回退一个字符
text = self.ui.textEdit.toPlainText()
if text:
data_list = text.split('\n')
end_row = data_list[-1]
if end_row == '0':
self.back_space()
def jisuan(self):
text = self.ui.textEdit.toPlainText()
# print(text)
if text:
data_list = text.strip().split('\n')
# print(data_list)
else:
data_list = []
try:
if not data_list:
return False
if len(data_list) == 1:
return True
elif len(data_list) == 2:
data = data_list[0]
self.ui.textEdit.setText(data)
return True
elif len(data_list) == 3:
num_1 = float(data_list[0])
num_2 = float(data_list[-1])
calculation = data_list[1]
if calculation == '*':
res = num_1 * num_2
elif calculation == '/':
res = num_1 / num_2
elif calculation == '+':
res = num_1 + num_2
elif calculation == '-':
res = num_1 - num_2
elif calculation == '^':
res = num_1 ** num_2
else:
# calculation == '√'
res = pow(num_1, 1 / num_2)
self.ui.textEdit.setPlainText(str(res))
self.ui.textEdit.moveCursor(QTextCursor.End)
return True
except Exception:
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
form = MyWidget()
# 加载qss文件的样式
# style_file = './qss/style.qss'
# qss_style = CommonHelper().read_qss(style_file)
# form.setStyleSheet(qss_style)
form.show()
sys.exit(app.exec_())
展示效果
源码链接
网盘链接: https://pan.baidu.com/s/1Cuih8ek2OeXxb9gmW-giPA.
提取码: uaah
CSDN资源链接: https://download.csdn.net/download/weixin_43868038/15011546.
----------------------------------------------------------------------------------------------
逻辑处理部分,第98——100行是后面新加的,所以源码里没加上,只在本页面加入了,下载源码后可自行加入