python qt5 第二个gui----简易计算器
笔者运行工作环境
Ubuntu18.04
Python qt5
Python3.6.9
gui界面以及全部代码
下边是通过qt designer设计的gui界面。
下边是全部代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '/home/li/桌面/python/qt/calcultor/calcultor.ui'
#
# Created by: PyQt5 UI code generator 5.12
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys,os
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(575, 443)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.result = QtWidgets.QTextEdit(self.centralwidget)
self.result.setGeometry(QtCore.QRect(120, 50, 331, 70))
self.result.setObjectName("result")
self.pushButton_1 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_1.setGeometry(QtCore.QRect(120, 270, 51, 41))
self.pushButton_1.setObjectName("pushButton_1")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(190, 270, 51, 41))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(260, 270, 51, 41))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(120, 210, 51, 41))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(190, 210, 51, 41))
self.pushButton_5.setObjectName("pushButton_5")
self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_6.setGeometry(QtCore.QRect(260, 210, 51, 41))
self.pushButton_6.setObjectName("pushButton_6")
self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_7.setGeometry(QtCore.QRect(120, 150, 51, 41))
self.pushButton_7.setObjectName("pushButton_7")
self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_8.setGeometry(QtCore.QRect(190, 150, 51, 41))
self.pushButton_8.setObjectName("pushButton_8")
self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_9.setGeometry(QtCore.QRect(260, 150, 51, 41))
self.pushButton_9.setObjectName("pushButton_9")
self.pushButton_0 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_0.setGeometry(QtCore.QRect(120, 330, 51, 41))
self.pushButton_0.setObjectName("pushButton_0")
self.pushButton_00 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_00.setGeometry(QtCore.QRect(190, 330, 51, 41))
self.pushButton_00.setObjectName("pushButton_00")
self.pushButton_dian = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_dian.setGeometry(QtCore.QRect(260, 330, 51, 41))
self.pushButton_dian.setObjectName("pushButton_dian")
self.pushButton_dengyu = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_dengyu.setGeometry(QtCore.QRect(400, 260, 51, 111))
self.pushButton_dengyu.setObjectName("pushButton_dengyu")
self.pushButton_clear = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_clear.setGeometry(QtCore.QRect(400, 150, 51, 101))
self.pushButton_clear.setObjectName("pushButton_clear")
self.pushButton_add = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_add.setGeometry(QtCore.QRect(330, 330, 51, 41))
self.pushButton_add.setObjectName("pushButton_add")
self.pushButton_subtract = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_subtract.setGeometry(QtCore.QRect(330, 270, 51, 41))
self.pushButton_subtract.setObjectName("pushButton_subtract")
self.pushButton_multiply = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_multiply.setGeometry(QtCore.QRect(330, 210, 51, 41))
self.pushButton_multiply.setObjectName("pushButton_multiply")
self.pushButton_besides = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_besides.setGeometry(QtCore.QRect(330, 150, 51, 41))
self.pushButton_besides.setObjectName("pushButton_besides")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menuBar = QtWidgets.QMenuBar(MainWindow)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 575, 28))
self.menuBar.setObjectName("menuBar")
self.menucalculator = QtWidgets.QMenu(self.menuBar)
self.menucalculator.setObjectName("menucalculator")
MainWindow.setMenuBar(self.menuBar)
self.menuBar.addAction(self.menucalculator.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.result.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:\'Ubuntu\'; font-size:11pt; 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_1.setText(_translate("MainWindow", "1"))
self.pushButton_2.setText(_translate("MainWindow", "2"))
self.pushButton_3.setText(_translate("MainWindow", "3"))
self.pushButton_4.setText(_translate("MainWindow", "4"))
self.pushButton_5.setText(_translate("MainWindow", "5"))
self.pushButton_6.setText(_translate("MainWindow", "6"))
self.pushButton_7.setText(_translate("MainWindow", "7"))
self.pushButton_8.setText(_translate("MainWindow", "8"))
self.pushButton_9.setText(_translate("MainWindow", "9"))
self.pushButton_0.setText(_translate("MainWindow", "0"))
self.pushButton_00.setText(_translate("MainWindow", "00"))
self.pushButton_dian.setText(_translate("MainWindow", "."))
self.pushButton_dengyu.setText(_translate("MainWindow", "="))
self.pushButton_clear.setText(_translate("MainWindow", "clear"))
self.pushButton_add.setText(_translate("MainWindow", "+"))
self.pushButton_subtract.setText(_translate("MainWindow", "-"))
self.pushButton_multiply.setText(_translate("MainWindow", "x"))
self.pushButton_besides.setText(_translate("MainWindow", "/"))
self.menucalculator.setTitle(_translate("MainWindow", "calculator"))
class mywindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(mywindow,self).__init__()
self.setupUi(self)
self.pushButton_clear.clicked.connect(self.clear_event)
self.pushButton_0.clicked.connect(self.button_event(0))
self.pushButton_1.clicked.connect(self.button_event(1))
self.pushButton_2.clicked.connect(self.button_event(2))
self.pushButton_3.clicked.connect(self.button_event(3))
self.pushButton_4.clicked.connect(self.button_event(4))
self.pushButton_5.clicked.connect(self.button_event(5))
self.pushButton_6.clicked.connect(self.button_event(6))
self.pushButton_7.clicked.connect(self.button_event(7))
self.pushButton_8.clicked.connect(self.button_event(8))
self.pushButton_9.clicked.connect(self.button_event(9))
self.pushButton_dian.clicked.connect(self.button_event('.'))
self.pushButton_add.clicked.connect(self.button_event('+'))
self.pushButton_subtract.clicked.connect(self.button_event('-'))
self.pushButton_multiply.clicked.connect(self.button_event('*'))
self.pushButton_besides.clicked.connect(self.button_event('/'))
self.pushButton_00.clicked.connect(self.button_event('00'))
self.pushButton_dengyu.clicked.connect(self.calc_complish)
def button_event(self,arg):
# print(dir(self.e_view))
global result
result=self.result
def fun(): #返回一个自定义的槽函数
global result
txt = result.toPlainText()
result.setText(txt + str(arg))
return fun
def calc_complish(self):
txt=self.result.toPlainText()
ans=''
try:
ans=str(eval(txt))
except BaseException:
ans='MathError'
# print(ans)
self.clear_event()
self.result.setText(ans)
def clear_event(self):
self.result.setText('')
app = QtWidgets.QApplication(sys.argv)
#MainWindow = QMainWindow()
window = mywindow()
window.show()
sys.exit(app.exec_())
代码讲解
1.在代码最前边的部分导入import sys
import sys,os
2.代码后半部分编写
class mywindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(mywindow,self).__init__()
self.setupUi(self)
#将按钮点击与事件连接起来
self.pushButton_clear.clicked.connect(self.clear_event)
self.pushButton_0.clicked.connect(self.button_event(0))
self.pushButton_1.clicked.connect(self.button_event(1))
self.pushButton_2.clicked.connect(self.button_event(2))
self.pushButton_3.clicked.connect(self.button_event(3))
self.pushButton_4.clicked.connect(self.button_event(4))
self.pushButton_5.clicked.connect(self.button_event(5))
self.pushButton_6.clicked.connect(self.button_event(6))
self.pushButton_7.clicked.connect(self.button_event(7))
self.pushButton_8.clicked.connect(self.button_event(8))
self.pushButton_9.clicked.connect(self.button_event(9))
self.pushButton_dian.clicked.connect(self.button_event('.'))
self.pushButton_add.clicked.connect(self.button_event('+'))
self.pushButton_subtract.clicked.connect(self.button_event('-'))
self.pushButton_multiply.clicked.connect(self.button_event('*'))
self.pushButton_besides.clicked.connect(self.button_event('/'))
self.pushButton_00.clicked.connect(self.button_event('00'))
self.pushButton_dengyu.clicked.connect(self.calc_complish)
#定义函数,此部分将按钮与数值或者运算符联系起来
def button_event(self,arg):
# print(dir(self.result))
global result
result=self.result
def fun(): #返回一个自定义的槽函数
global result
txt = result.toPlainText()
result.setText(txt + str(arg))
return fun
#定义了完成运算的函数,此函数连接‘等于’按钮,并且将结果输出到result的窗口。
def calc_complish(self):
txt=self.result.toPlainText()
ans=''
try:
ans=str(eval(txt))
except BaseException:
ans='MathError'
# print(ans)
self.clear_event()
self.result.setText(ans)
#定义了清除窗口中数值的函数,此函数连接‘clear’按钮。
def clear_event(self):
self.result.setText('')
#将创建的gui实例化
app = QtWidgets.QApplication(sys.argv)
#MainWindow = QMainWindow()
window = mywindow()
window.show()
sys.exit(app.exec_())
参考连接
用PyQt5开发一个简易的计算器
本文重点参考,其中借鉴了一部分代码。
使用PyQt5编写一个简易的计算器
此部分编写的简易计算器可以看一下。
Python-PyQt5-图形可视化界面(3)–按钮–Qpushbutton
其中有一部分按钮的使用不是很清楚,可以参考此链接。