0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用Python制作一款计算器

Wildesbeast 来源:今日头条 作者:有趣的程序媛 2020-02-05 12:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 ui设计

使用qt designer ,按装anaconda后,在如下路径找到:

conda3.05Libraryin

designer.exe文件,双击启动:

创建窗体,命名为XiaoDing,整个的界面如下所示:

私信小编01 领取完整项目代码

qt 设计器提供的常用控件基本都能满足开发需求,通过拖动左侧的控件,很便捷的就能搭建出如下的UI界面,比传统的手写控件代码要方便很多。

最终设计的计算器XiaoDing界面如下,

比如,其中一个用于计算器显示的对象:lcdNumber,对象的类型为:LCD Number。右侧为计算器中用到的所有对象。

2 转py文件

使用如下命令,将设计好的ui文件转为py文件

pyuic5 -o ./calculator/MainWindow.py ./calculator/mainwindow.ui

3 计算器实现逻辑

导入库:

fromPyQt5.QtGuiimport* fromPyQt5.QtWidgetsimport* fromPyQt5.QtCoreimport* importoperator fromMainWindowimportUi_MainWindow

主题代码逻辑很精简:

#Calculatorstate. READY=0 INPUT=1 classMainWindow(QMainWindow,Ui_MainWindow): def__init__(self,*args,**kwargs): super(MainWindow,self).__init__(*args,**kwargs) self.setupUi(self) #Setupnumbers. forninrange(0,10): getattr(self,'pushButton_n%s'%n).pressed.connect(lambdav=n:self.input_number(v)) #Setupoperations. self.pushButton_add.pressed.connect(lambda:self.operation(operator.add)) self.pushButton_sub.pressed.connect(lambda:self.operation(operator.sub)) self.pushButton_mul.pressed.connect(lambda:self.operation(operator.mul)) self.pushButton_div.pressed.connect(lambda:self.operation(operator.truediv))#operator.divforPython2.7 self.pushButton_pc.pressed.connect(self.operation_pc) self.pushButton_eq.pressed.connect(self.equals) #Setupactions self.actionReset.triggered.connect(self.reset) self.pushButton_ac.pressed.connect(self.reset) self.actionExit.triggered.connect(self.close) self.pushButton_m.pressed.connect(self.memory_store) self.pushButton_mr.pressed.connect(self.memory_recall) self.memory=0 self.reset() self.show()

基础方法:

definput_number(self,v): ifself.state==READY: self.state=INPUT self.stack[-1]=v else: self.stack[-1]=self.stack[-1]*10+v self.display() defdisplay(self): self.lcdNumber.display(self.stack[-1])

按钮RE,M, RE对应的实现逻辑:

defreset(self): self.state=READY self.stack=[0] self.last_operation=None self.current_op=None self.display() defmemory_store(self): self.memory=self.lcdNumber.value() defmemory_recall(self): self.state=INPUT self.stack[-1]=self.memory self.display()

+,-,x,/,/100对应实现方法:

defoperation(self,op): ifself.current_op:#Completethecurrentoperation self.equals() self.stack.append(0) self.state=INPUT self.current_op=op defoperation_pc(self): self.state=INPUT self.stack[-1]*=0.01 self.display()

=号对应的方法实现:

defequals(self): ifself.state==READYandself.last_operation: s,self.current_op=self.last_operation self.stack.append(s) ifself.current_op: self.last_operation=self.stack[-1],self.current_op try: self.stack=[self.current_op(*self.stack)] exceptException: self.lcdNumber.display('Err') self.stack=[0] else: self.current_op=None self.state=READY self.display()

main函数:

if__name__=='__main__': app=QApplication([]) app.setApplicationName("XiaoDing") window=MainWindow() app.exec_()

完整代码请参考点击阅读原文下载,代码只有100行。完整代码请点击文章最底部的【阅读原文】。启动后的界面如下:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算器
    +关注

    关注

    16

    文章

    440

    浏览量

    38728
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89600
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    灵动微电子最新最火热的一款芯片推荐

    希望找一款灵动微电子最新最火热的一款芯片,我们想做个图形化的界面配置,供大家以后直接创建工程,用国产工具McuStudio做,McuStudio支持任何内核任何厂家的芯片,希望大家有推荐的型号可以发给我
    发表于 10-29 17:15

    Quartz Frequency 实战:热力图+计算器(6 篇)

    AT-cut 面向对象:嵌入式/硬件/射频/物联网工程师 内容亮点:可视化图示 + 在线计算器 + 设计边界与案例 大家好!整理了套石英定时(Quartz Timing)高原创度文章与工具
    发表于 10-09 15:42

    一款专为「镜面/透明工件」而生的激光位移传感

    传统激光位移传感遇到[ 高透亮 ]工件,会无法检测,或者误差很大。光子精密有一款专为「镜面/透明工件」而生的激光位移传感
    的头像 发表于 08-14 10:13 689次阅读
    <b class='flag-5'>一款</b>专为「镜面/透明工件」而生的激光位移传感<b class='flag-5'>器</b>

    Qorvo全新设计计算器:晶振选型、能耗预算计算器和链路预算与覆盖范围计算器

    功能强大的PC端计算工具 。这些工具—— 晶振采购工具 、 能耗预算计算器 和 链路预算与覆盖范围计算器 ——让优化晶振选型、预测电池续航时间以及评估RF链路性能变得前所未有地简单。
    的头像 发表于 06-24 17:51 1486次阅读
    Qorvo全新设计<b class='flag-5'>计算器</b>:晶振选型、能耗预算<b class='flag-5'>计算器</b>和链路预算与覆盖范围<b class='flag-5'>计算器</b>

    VirtualLab:衍射角计算器

    介质的折射率、结构的周期和入射角。这种相关性在数学上被编码在光栅方程中。在这个用例中,我们介绍了VirtualLab Fusion的衍射角计算器,这是个用于计算光栅方程的方便工具。 打开衍射角
    发表于 06-16 08:48

    AlphaEvolve:一款基于Gemini的编程Agent,用于设计高级算法

    构思创新理念。如今,Google 进步扩展这些能力,将其应用于解决数学基础领域和现代计算中高度复杂的难题。 AlphaEvolve 是一款由大语言模型驱动的进化式编程代理,致力于通用算法的发现与优化。该平台将 Gemini 模
    的头像 发表于 05-19 11:19 1480次阅读
    AlphaEvolve:<b class='flag-5'>一款</b>基于Gemini的编程Agent,用于设计高级算法

    VirtualLab Fusion应用:相干时间和相干长度计算器

    摘要 在本用例中,我们介绍了计算器,它可以根据给定光源的波谱信息快速估计其时间相干特性。然后,可以将该计算器的结果自动复制到通用探测中,以便在考虑时间相干性时应用近似方法,而无
    发表于 04-08 08:48

    VirtualLab:衍射角计算器

    介质的折射率、结构的周期和入射角。这种相关性在数学上被编码在光栅方程中。在这个用例中,我们介绍了VirtualLab Fusion的衍射角计算器,这是个用于计算光栅方程的方便工具。 打开衍射角
    发表于 04-08 08:46

    Made with KiCad(121):OpenRPNCalc 开源科学 RPN 计算器

    “  OpenRPNCalc 是一款基于 STM32 微控制的科学计算器。 ” Made with KiCad 系列将支持新的展示方式。直接将以下链接复制到浏览中(或点击“阅读原文
    的头像 发表于 03-26 11:45 1213次阅读
    Made with KiCad(121):OpenRPNCalc 开源科学 RPN <b class='flag-5'>计算器</b>

    一款新的播放:Xibo for ChromeOS介绍

    我们非常高兴地宣布与 ChromeOS 合作推出一款新的播放。为您带来 Xibo for ChromeOS!这最新的可靠、高度安全且易于管理的数字标牌解决方案使客户能够充分利用 Xibo CMS
    的头像 发表于 03-14 09:26 1021次阅读

    STM32H753IIT6 一款32位微控制MCU/MSP430F5325IPNR一款16位MCU

    ‌MSP430F5325IPNR‌是一款16位低功耗微控制,属于MSP430系列。该微控制器具有以下主要特点和功能: 1、低功耗设计‌:MSP430F5325IPNR采用低功耗设计,适合对能耗敏感
    发表于 02-21 14:59

    VirtualLab Fusion应用:相干时间和相干长度计算器

    摘要 在本用例中,我们介绍了计算器,它可以根据给定光源的波谱信息快速估计其时间相干特性。然后,可以将该计算器的结果自动复制到通用探测中,以便在考虑时间相干性时应用近似方法,而无需
    发表于 12-27 08:48

    Debye-Wolf积分计算器的用法

    即可进行计算。 该案例将说明如何在VirtualLab中使用Debye-Wolf积分计算器。 **建模任务 ** 开启Debye-Wolf积分计算器 •我们直接单击计算器,然后选择D
    发表于 12-26 08:59

    LP光纤模式计算器

    :渐变折射率 (GRIN) 光纤 光纤模式计算器允许定义线性偏振贝塞尔模式和线性偏振拉盖尔模式。 对于 GRIN 光纤,定义了梯度常数。 然后通过下式计算折射率 与前种情况样,
    发表于 12-18 13:36

    求推荐一款处理24V的差分编码信号的芯片

    你好,我们先前用的是SN65LBC175AD处理5V的差分编码信号,现在编码换成24V的,希望能推荐一款处理24V的差分编码信号的芯片,谢谢!
    发表于 12-18 06:52