網站首頁 編程語言 正文
本文實例為大家分享了Pyqt實現簡易計算器的具體代碼,供大家參考,具體內容如下
環境:pycharm、python3.7
首先用qtDesigner設計出如下界面。
再用pyUIC將.ui文件轉化內.py文件。源碼如下
# -*- coding: utf-8 -*-
?
# Form implementation generated from reading ui file 'calculator.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
?
from PyQt5 import QtCore, QtGui, QtWidgets
?
class Ui_MainWindow(object):
? ? def setupUi(self, MainWindow):
? ? ? ? MainWindow.setObjectName("MainWindow")
? ? ? ? MainWindow.resize(726, 592)
? ? ? ? self.centralwidget = QtWidgets.QWidget(MainWindow)
? ? ? ? self.centralwidget.setObjectName("centralwidget")
? ? ? ? self.outLine = QtWidgets.QLineEdit(self.centralwidget)
? ? ? ? self.outLine.setGeometry(QtCore.QRect(180, 50, 351, 41))
? ? ? ? self.outLine.setObjectName("outLine")
? ? ? ? self.bt1 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt1.setGeometry(QtCore.QRect(190, 110, 61, 61))
? ? ? ? self.bt1.setObjectName("bt1")
? ? ? ? self.bt2 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt2.setGeometry(QtCore.QRect(270, 110, 61, 61))
? ? ? ? self.bt2.setObjectName("bt2")
? ? ? ? self.bt3 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt3.setGeometry(QtCore.QRect(360, 110, 61, 61))
? ? ? ? self.bt3.setObjectName("bt3")
? ? ? ? self.btPlus = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btPlus.setGeometry(QtCore.QRect(450, 110, 61, 61))
? ? ? ? self.btPlus.setObjectName("btPlus")
? ? ? ? self.bt6 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt6.setGeometry(QtCore.QRect(360, 190, 61, 61))
? ? ? ? self.bt6.setObjectName("bt6")
? ? ? ? self.bt5 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt5.setGeometry(QtCore.QRect(270, 190, 61, 61))
? ? ? ? self.bt5.setObjectName("bt5")
? ? ? ? self.btSub = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btSub.setGeometry(QtCore.QRect(450, 190, 61, 61))
? ? ? ? self.btSub.setObjectName("btSub")
? ? ? ? self.bt4 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt4.setGeometry(QtCore.QRect(190, 190, 61, 61))
? ? ? ? self.bt4.setObjectName("bt4")
? ? ? ? self.bt9 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt9.setGeometry(QtCore.QRect(360, 270, 61, 61))
? ? ? ? self.bt9.setObjectName("bt9")
? ? ? ? self.bt8 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt8.setGeometry(QtCore.QRect(270, 270, 61, 61))
? ? ? ? self.bt8.setObjectName("bt8")
? ? ? ? self.btMul = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btMul.setGeometry(QtCore.QRect(450, 270, 61, 61))
? ? ? ? self.btMul.setObjectName("btMul")
? ? ? ? self.bt7 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt7.setGeometry(QtCore.QRect(190, 270, 61, 61))
? ? ? ? self.bt7.setObjectName("bt7")
? ? ? ? self.btCal = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btCal.setGeometry(QtCore.QRect(360, 340, 61, 61))
? ? ? ? self.btCal.setObjectName("btCal")
? ? ? ? self.bt0 = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.bt0.setGeometry(QtCore.QRect(270, 340, 61, 61))
? ? ? ? self.bt0.setObjectName("bt0")
? ? ? ? self.btDiv = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btDiv.setGeometry(QtCore.QRect(450, 340, 61, 61))
? ? ? ? self.btDiv.setObjectName("btDiv")
? ? ? ? self.btClr = QtWidgets.QPushButton(self.centralwidget)
? ? ? ? self.btClr.setGeometry(QtCore.QRect(190, 340, 61, 61))
? ? ? ? self.btClr.setObjectName("btClr")
? ? ? ? MainWindow.setCentralWidget(self.centralwidget)
? ? ? ? self.menubar = QtWidgets.QMenuBar(MainWindow)
? ? ? ? self.menubar.setGeometry(QtCore.QRect(0, 0, 726, 26))
? ? ? ? self.menubar.setObjectName("menubar")
? ? ? ? MainWindow.setMenuBar(self.menubar)
? ? ? ? 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", "MainWindow"))
? ? ? ? self.bt1.setText(_translate("MainWindow", "1"))
? ? ? ? self.bt2.setText(_translate("MainWindow", "2"))
? ? ? ? self.bt3.setText(_translate("MainWindow", "3"))
? ? ? ? self.btPlus.setText(_translate("MainWindow", "+"))
? ? ? ? self.bt6.setText(_translate("MainWindow", "6"))
? ? ? ? self.bt5.setText(_translate("MainWindow", "5"))
? ? ? ? self.btSub.setText(_translate("MainWindow", "-"))
? ? ? ? self.bt4.setText(_translate("MainWindow", "4"))
? ? ? ? self.bt9.setText(_translate("MainWindow", "9"))
? ? ? ? self.bt8.setText(_translate("MainWindow", "8"))
? ? ? ? self.btMul.setText(_translate("MainWindow", "*"))
? ? ? ? self.bt7.setText(_translate("MainWindow", "7"))
? ? ? ? self.btCal.setText(_translate("MainWindow", "="))
? ? ? ? self.bt0.setText(_translate("MainWindow", "0"))
? ? ? ? self.btDiv.setText(_translate("MainWindow", "/"))
? ? ? ? self.btClr.setText(_translate("MainWindow", "clear"))
在新建一個py文件引入剛才pyUIC生成的ui文件。寫入相關代碼,源碼如下:
# -*- coding: utf-8 -*-
# @Author:ct
# @ProjectName:calculator.py
# @Desc:
# @Time:
import sys
from calculatorUI import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
?
?
class mWindow(QMainWindow, Ui_MainWindow):
? ? def __init__(self):
? ? ? ? super(mWindow, self).__init__()
? ? ? ? self.setupUi(self)
?
? ? # 定義所有按鈕事件函數
? ? def prs_bt0(self):
? ? ? ? self.outLine.insert('0')
?
? ? def prs_bt1(self):
? ? ? ? self.outLine.insert('1')
?
? ? def prs_bt2(self):
? ? ? ? self.outLine.insert('2')
?
? ? def prs_bt3(self):
? ? ? ? self.outLine.insert('3')
?
? ? def prs_bt4(self):
? ? ? ? self.outLine.insert('4')
?
? ? def prs_bt5(self):
? ? ? ? self.outLine.insert('5')
?
? ? def prs_bt6(self):
? ? ? ? self.outLine.insert('6')
?
? ? def prs_bt7(self):
? ? ? ? self.outLine.insert('7')
?
? ? def prs_bt8(self):
? ? ? ? self.outLine.insert('8')
?
? ? def prs_bt9(self):
? ? ? ? self.outLine.insert('9')
?
? ? def prs_btPlus(self):
? ? ? ? self.outLine.insert('+')
?
? ? def prs_btSub(self):
? ? ? ? self.outLine.insert('-')
?
? ? def prs_btMul(self):
? ? ? ? self.outLine.insert('*')
?
? ? def prs_btDiv(self):
? ? ? ? self.outLine.insert('/')
?
? ? def prs_btClr(self):
? ? ? ? self.outLine.clear()
?
? ? # 計算表達式事件,通過eval函數將字符串表達式計算
? ? def prs_btCal(self):
? ? ? ? # 獲得輸入框的內容(字符串形式)
? ? ? ? exp = self.outLine.text()
? ? ? ? res = eval(exp)
? ? ? ? self.outLine.insert('=')
? ? ? ? self.outLine.insert(str(res))
?
?
if __name__ == '__main__':
? ? app = QApplication(sys.argv)
? ? mainWindow = mWindow()
? ? # mainWindow.outLine.setEnabled(False)
? ? # 使輸出框只能被讀取,不能輸入內容
? ? mainWindow.outLine.setReadOnly(True)
? ? # 關聯所有按鈕事件
? ? mainWindow.bt0.clicked.connect(mainWindow.prs_bt0)
? ? mainWindow.bt1.clicked.connect(mainWindow.prs_bt1)
? ? mainWindow.bt2.clicked.connect(mainWindow.prs_bt2)
? ? mainWindow.bt3.clicked.connect(mainWindow.prs_bt3)
? ? mainWindow.bt4.clicked.connect(mainWindow.prs_bt4)
? ? mainWindow.bt5.clicked.connect(mainWindow.prs_bt5)
? ? mainWindow.bt6.clicked.connect(mainWindow.prs_bt6)
? ? mainWindow.bt7.clicked.connect(mainWindow.prs_bt7)
? ? mainWindow.bt8.clicked.connect(mainWindow.prs_bt8)
? ? mainWindow.bt9.clicked.connect(mainWindow.prs_bt9)
? ? mainWindow.btPlus.clicked.connect(mainWindow.prs_btPlus)
? ? mainWindow.btDiv.clicked.connect(mainWindow.prs_btDiv)
? ? mainWindow.btMul.clicked.connect(mainWindow.prs_btMul)
? ? mainWindow.btSub.clicked.connect(mainWindow.prs_btSub)
? ? mainWindow.btCal.clicked.connect(mainWindow.prs_btCal)
? ? mainWindow.btClr.clicked.connect(mainWindow.prs_btClr)
?
? ? mainWindow.show()
? ? # 讓程序循環運行
? ? sys.exit(app.exec_())
運行程序,結果如下:
可進行簡單的運算。當然還有諸多bug,如輸入錯誤表達式不能容錯等,待以后修復。
原文鏈接:https://blog.csdn.net/qq_41599205/article/details/97817774
相關推薦
- 2022-05-08 C++類中隱藏的幾個默認函數你知道嗎_C 語言
- 2022-04-20 Appium自動化測試中獲取Toast信息操作_python
- 2022-11-05 Nginx配置文件中location配置的多種場景_nginx
- 2022-09-06 詳解golang?defer?閉包?匿名函數_Golang
- 2022-06-12 Python數據傳輸黏包問題_python
- 2023-02-15 Python實現PING命令的示例代碼_python
- 2022-03-18 C語言回溯法解八皇后問題(八皇后算法)_C 語言
- 2022-02-19 springboot log4j2-dev.xml打成war包部署到tomcat無效
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支