参考如下键盘格式写了一个键盘输入,目前还不能进行运算,后期完善。。。

效果如下:

完整代码:

from PyQt5.QtWidgets import (QApplication,QWidget,QPushButton,QLCDNumber,QFormLayout,QLineEdit,QLabel,QGridLayout)
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt,QTimer,QDateTime,QDate,QTime,QSize
import sys class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,330,310)
self.setWindowTitle("数字键盘输入")
gridLayout = QGridLayout()
self.display = QLineEdit("")
self.display.setFixedSize(QSize(287,40))
self.display.setReadOnly(True)
self.display.setAlignment(Qt.AlignRight)
self.display.setFont(QFont("微软雅黑",14,QFont.Bold))
gridLayout.addWidget(self.display,0,0,1,4)
self.showNum = "" keys = ['Clear', '/', '*', '-',
'', '', '', '+',
'', '', '', '',
'', '', '', 'Enter',
'', '', '.', '']
position = [(0, 0), (0, 1), (0, 2), (0, 3),
(1, 0), (1, 1), (1, 2), (1, 3),
(2, 0), (2, 1), (2, 2), (2, 2),
(3, 0), (3, 1), (3, 2), (3, 3),
(4, 0), (4, 1), (4, 2), (4, 3), ]
for item in range(len(keys)):
btn = QPushButton(keys[item])
btn.setFixedSize(QSize(60, 40))
btn.setFont(QFont("微软雅黑",12,QFont.Bold))
btn.clicked.connect(self.btnClicked)
if keys[item] == "+":
gridLayout.addWidget(btn, 2, 3, 2, 1)
btn.setFixedSize(QSize(60, 90))
elif keys[item] == "Enter":
gridLayout.addWidget(btn, 4, 3, 2, 1)
btn.setFixedSize(QSize(60, 90))
elif keys[item] == "":
gridLayout.addWidget(btn, 5, 0, 1, 2)
btn.setFixedSize(QSize(142, 40))
elif keys[item] == "":
continue
else:
gridLayout.addWidget(btn, position[item][0]+1, position[item][1], 1, 1)
self.setLayout(gridLayout) def btnClicked(self):
sender = self.sender()
symbols = ["Clear","/","*","-","+","Enter"]
if sender.text() not in symbols:
self.showNum += sender.text()
self.display.setText(self.showNum)
elif sender.text() == "Clear":
self.display.setText("")
self.showNum = "" if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

今天完善了一下,可以进行简单的+ - * / 运算了,效果如下:

完整代码:

 from PyQt5.QtWidgets import (QApplication,QWidget,QPushButton,QLCDNumber,QFormLayout,QLineEdit,QLabel,QGridLayout)
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt,QTimer,QDateTime,QDate,QTime,QSize
import sys class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI() def initUI(self):
self.setGeometry(300,300,330,310)
self.setWindowTitle("简易计算器")
gridLayout = QGridLayout()
self.display = QLineEdit("")
self.display.setFixedSize(QSize(287,40))
self.display.setReadOnly(True)
self.display.setAlignment(Qt.AlignRight)
self.display.setFont(QFont("微软雅黑",14,QFont.Bold))
gridLayout.addWidget(self.display,0,0,1,4)
self.showNum = ""
self.firstNum = ""
self.lastNum = "" keys = ['Clear', '/', '*', '-',
'', '', '', '+',
'', '', '', '',
'', '', '', 'Enter',
'', '', '.', '']
position = [(0, 0), (0, 1), (0, 2), (0, 3),
(1, 0), (1, 1), (1, 2), (1, 3),
(2, 0), (2, 1), (2, 2), (2, 2),
(3, 0), (3, 1), (3, 2), (3, 3),
(4, 0), (4, 1), (4, 2), (4, 3), ]
for item in range(len(keys)):
btn = QPushButton(keys[item])
btn.setFixedSize(QSize(60, 40))
btn.setFont(QFont("微软雅黑",12,QFont.Bold))
btn.clicked.connect(self.btnClicked)
if keys[item] == "+":
gridLayout.addWidget(btn, 2, 3, 2, 1)
btn.setFixedSize(QSize(60, 90))
elif keys[item] == "Enter":
gridLayout.addWidget(btn, 4, 3, 2, 1)
btn.setFixedSize(QSize(60, 90))
elif keys[item] == "":
gridLayout.addWidget(btn, 5, 0, 1, 2)
btn.setFixedSize(QSize(142, 40))
elif keys[item] == "":
continue
else:
gridLayout.addWidget(btn, position[item][0]+1, position[item][1], 1, 1)
self.setLayout(gridLayout) def btnClicked(self):
sender = self.sender()
symbols = ["Clear","/","*","-","+","Enter"]
if sender.text() not in symbols:
self.showNum += sender.text()
self.display.setText(self.showNum)
elif sender.text() == "Clear":
self.display.setText("")
self.showNum = ""
elif sender.text() == "/":
self.firstNum = self.showNum
self.display.setText("")
self.showNum = ""
self.operator = "/"
elif sender.text() == "*":
self.firstNum = self.showNum
self.display.setText("")
self.showNum = ""
self.operator = "*"
elif sender.text() == "-":
self.firstNum = self.showNum
self.display.setText("")
self.showNum = ""
self.operator = "-"
elif sender.text() == "+":
self.firstNum = self.showNum
self.display.setText("")
self.showNum = ""
self.operator = "+" elif sender.text() == "Enter":
if self.operator == "/":
result = float(self.firstNum) / float(self.showNum)
result = float("%.2f"%result)
elif self.operator == "*":
result = float(self.firstNum) * float(self.showNum)
result = float("%.2f" % result)
elif self.operator == "+":
result = float(self.firstNum) + float(self.showNum)
result = float("%.2f" % result)
elif self.operator == "-":
result = float(self.firstNum) - float(self.showNum)
result = float("%.2f" % result)
self.display.setText(str(result))
self.showNum = "" if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

简易计算器

【PyQt5-Qt Designer】简易的数字键盘输入+简易计算器的更多相关文章

  1. PyQt5 & Qt Designer使用小结

    开始在知乎写文章的原因,主要还是想整理平时的经验,方便自己以后查看,有机会的话大家也可以交流吧. 11月中旬由于项目需要,和另一名实习生负责使用Python开发一个数据分析的小软件. 虽然才开始接触Q ...

  2. PyCharm+PyQt5+Qt Designer配置

    配置前提 因为本机已经配置完毕了,本次使用的是虚拟机中的Win7系统,Win10系统操作步骤完全一样,无任何区别 PyCharm (这个不多说,官网下载安装,我是用的是2019.3版本) Python ...

  3. robotframework+appium,数字键盘输入问题,keycode,press keycode

    需要注意事项 appium自带的输入法应该是无法模拟控制键和基本键的,需要自行使用adb切换成搜狗或者android输入法,然后case完成之后记得切回appium输入法 appium模拟发送基本键命 ...

  4. PyQT5速成教程-4 Qt Designer实战[上]

    本文由 沈庆阳 所有,转载请与作者取得联系! 前言 在前面几节的学习中,我们对PyQt的基本使用.Qt Designer与Python编码的工作流程有了基本的学习.同时也掌握了Qt Designer中 ...

  5. 痞子衡嵌入式:超级好用的可视化PyQt GUI构建工具(Qt Designer)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PyQt GUI构建工具Qt Designer. 痞子衡开博客至今已有好几年,一直以嵌入式开发相关主题的文章为主线,偶尔穿插一些其他技术 ...

  6. PyCharm+Qt Designer+PyUIC安装配置教程

    Qt Designer用于像VC++的MFC一样拖放.设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们 ...

  7. Win10安装PyQt5与Qt Designer【转】

    https://blog.csdn.net/u011342224/article/details/78879633 1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 ...

  8. Win10安装PyQt5与Qt Designer

    1.直接在cmd中通过pip安装PyQt5 1 pip install pyqt5 会自动下载PyQt5以及sip并安装,因为PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5- ...

  9. PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程

    摘要:Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合.这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的 ...

随机推荐

  1. 解剖 Elasticsearch 集群 - 之一

    解剖 Elasticsearch 集群 - 之一 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论底层的存储模型以及 CRUD(创建.读取.更新 ...

  2. React Native - FlexBox弹性盒模型

    FlexBox布局 1. 什么是FlexBox布局?   弹性盒模型(The Flexible Box Module),又叫FlexBox,意为"弹性布局",旨在通过弹性的方式来对 ...

  3. hdoj:2035

    #include <iostream> using namespace std; int main() { long a, b; && b != ) { long resu ...

  4. mycat 9066管理端口

    1.连接mycat 9066管理端口 命令:mysql -uroot -proot -P9066 -h127.0.0.1 -u:用户名 -p:密码 -P:端口 -h:ip地址例:linux路径切换到m ...

  5. highCharts图表入门简介

    一.Highcharts简介 Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库 Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在W ...

  6. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  7. 电子书阅读(epub) --- calibre

    https://calibre-ebook.com/download   calibre https://www.fosshub.com/Calibre.html   win 64 bit calib ...

  8. Thinkphp 中的自动验证 上一篇有例子

    说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. 说明:这里没练习静态自动验证:如果用到静态验证首先自定义一个控制器,再在Model ...

  9. Tif文件合并类

    using System; using System.Collections; using System.Collections.Generic; using System.Drawing; usin ...

  10. 难以接受你的改变:从project.json到.csproj

    自从微软做了一个艰难的决定——.NET Core彻底放弃project.json,全面改回.csproj——至今,虽然赞美之声不断,但我依然不喜欢也难以接受这样的改变. 难以接受主要有两方面的原因: ...