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

    文章

    441

    浏览量

    39002
  • python
    +关注

    关注

    58

    文章

    4883

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索STPMC1:可编程多相电能计算器IC的卓越性能与应用潜力

    探索STPMC1:可编程多相电能计算器IC的卓越性能与应用潜力 在电力计量和能源管理领域,精确的电能计算至关重要。STPMC1作为一款可编程多相电能计算器IC,为电力系统的高效运行提供
    的头像 发表于 04-17 15:05 48次阅读

    深入解析AT89C51:一款经典8位微控制

    深入探究。 文件下载: AT89C51-24AC.pdf 、产品概述 AT89C51是一款低功耗、高性能的CMOS 8位微计算机,拥有4K字节的Flash可编程和可擦除只读存储(P
    的头像 发表于 04-06 09:05 494次阅读

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解和结果。这个用例介绍了种使用路径变量和Visual Studio代码将Python连接到Virtu
    发表于 03-31 09:39

    深度剖析ADM7154:一款卓越的RF线性稳压

    深度剖析ADM7154:一款卓越的RF线性稳压 在电子设计领域,电源管理是至关重要的环节。尤其是在对噪声敏感的应用场景中,如PLLs、VCOs等,需要一款高性能的线性稳压来提供稳定
    的头像 发表于 03-19 15:25 154次阅读

    STPMC1可编程多相电能计算器IC:设计与应用详解

    STPMC1可编程多相电能计算器IC:设计与应用详解 在电力计量领域,精准且高效的电能计算是关键。STPMC1作为一款可编程多相电能计算器IC,为电力线系统的有效电能测量提供了强大的解
    的头像 发表于 03-02 16:55 583次阅读

    探索LM83:一款功能强大的温度传感

    探索LM83:一款功能强大的温度传感 在电子设备的设计和运行过程中,温度监测至关重要。而一款好的温度传感可以帮助我们精确捕捉温度变化,预防过热等问题,保障设备的稳定运行。今天,我们
    的头像 发表于 02-26 13:50 302次阅读

    深度解析TMP401:一款强大的数字温度传感

    深度解析TMP401:一款强大的数字温度传感 在电子设备的设计中,温度监测是至关重要的环。今天,我们就来深入探讨一款优秀的温度传感——
    的头像 发表于 02-26 09:45 290次阅读

    DRV595:一款高效的PWM功率驱动

    DRV595:一款高效的PWM功率驱动 作为名电子工程师,在设计中选择合适的功率驱动至关重要。今天,我要详细为大家介绍德州仪器(TI)的DRV595——
    的头像 发表于 01-30 11:05 590次阅读

    STLED316S:一款强大的LED控制与驱动

    STLED316S:一款强大的LED控制与驱动 各位电子工程师们,今天要给大家详细介绍一款非常实用的LED控制和驱动
    的头像 发表于 01-28 09:45 516次阅读

    深入解析ZSSC3286:一款强大的传感信号调理IC

    深入解析ZSSC3286:一款强大的传感信号调理IC 在工业和电子应用领域,传感信号的准确调理至关重要。今天要给大家详细介绍的是ZSSC3286,这是一款具备IO - Link功能
    的头像 发表于 12-26 18:10 1426次阅读

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

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

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

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

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

    功能强大的PC端计算工具 。这些工具—— 晶振采购工具 、 能耗预算计算器 和 链路预算与覆盖范围计算器 ——让优化晶振选型、预测电池续航时间以及评估RF链路性能变得前所未有地简单。
    的头像 发表于 06-24 17:51 1831次阅读
    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 1894次阅读
    AlphaEvolve:<b class='flag-5'>一款</b>基于Gemini的编程Agent,用于设计高级算法