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

效果如下:

完整代码:

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. T-SQL基础查询——单表查询

    1,查询的顺序 SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders FROM Sales.Orders GROUP BY ...

  2. 30. Substring with Concatenation of All Words

    题目: You are given a string, s, and a list of words, words, that are all of the same length. Find all ...

  3. 牛客网_Go语言相关练习_选择题(3)

    题目来源于牛客网 一.选择题 Go语言自带垃圾回收机制. 如果是值传递的话子函数对map修改不会影响父函数中的map,如果是地址传递则会影响. go语言编译器会自动在以标识符.数字字面量.字母字面量. ...

  4. shell脚本介绍
 shell脚本结构和执行
date命令用法
 shell脚本中的变量

  5. win8 下 TortoiseSVN 不显示图标

    如果你安装 TortoiseSVN 之后,功能使用正常,但是文件夹或文件左上角就是不显示图标,那么你可能 1. 64bit 系统上装了 32bit 的 TortoiseSVN 解决方法是,再安装 64 ...

  6. [React] 02 - Intro: why react and its design pattern

    为啥使用React,给我个理由 过去 需要手动更新DOM.费力地记录每一个状态:既不具备扩展性,又很难加入新的功能,就算可以,也是有着冒着很大的风险. 不过,使用这种开发方式很难打造出极佳的用户体验. ...

  7. WebApi中的Session与Token间的处理对接

    首先,说起来创建session,一般会针对注册登录或者授权等情况: session 从字面上讲,就是会话.这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长 ...

  8. Spring学习笔记--Spring配置文件和依赖注入

    Spring配置文件 1.alias:设置别名,为bean设置别名,并且可以设置多个别名; <!-- 设置别名 --> <alias name="user" al ...

  9. nginx+tomcat 下POST响应参数过大无法显示完整及文件下载服务遇到过大文件无法下载解决办法

    在nginx里location里面设置 proxy_buffering off; 或者 proxy_buffering on; proxy_buffers 4 4k; proxy_busy_buffe ...

  10. Angular 定时器$timeout和$interval,延时调用

    项目中有用到定时器定时刷新页面的数据,在网上查看了一些资料,整理了一下,备忘. $timeout 用法如下:$timeout(fn,[delay],[invokeApply]); fn:一个将被延迟执 ...