找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5425|回复: 0
收起左侧

Python学习笔记:用Python开发一个计算器项目

[复制链接]
ID:80221 发表于 2019-1-28 20:46 | 显示全部楼层 |阅读模式

最近抽空看了下python的学习文档,发现开发工具以及资料支持对开发者相当的友好,相比之下,以前用TCL&Tk做的项目主要缺点有两个:1,开发难度大,调试手段只有靠print一种,而且语法错误也经常定位不准确。2.维护难度大,目前已经成型T口工具函数参数传递基本是全局变量global传递,且需求有点变更就要加函数,导致代码越来越臃肿,debug起来不方便。

以上问题用Python开发是不存在的。基于以上诉求,我通过自己设计,开发一款可以在Windows 上运行的计算器小插件,达到掌握Python 语法 GUI界面控件入门的目的。

学习前准备:

  • 安装Python 环境安装,python-3.5.4(32)

我的电脑装这个会报错

我装的是64位的python-3.7.2-amd64,这个在python.org 官网都有下载

安装完成后 在cmd敲命令,如果显示没有该指令,则需要如下指令添加环境变量

path=%path%;C:\Python37(python安装路径)

同理,pip工具(下载库以及辅助开发工具)也需要添加环境变量

path=%path%;C:\Python37\Scripts (pip 安装路径)

环境变量安装成功后cmd执行命令:

Pip install PyQt5

Pip install PyQt5-tools

Pip install Pyinstaller

  • 安装开发环境Pcharm。去Pcharm官网下载免费版安装包,这个默认安装就行了。
  • 设置Pcharm

File-setting-project-project interpreter 路径定位到python安装的位置

软件安装到此结束。

项目开发阶段:

期望:开发一个可以多位数加减乘除运算的界面。

第一阶段:语法学习,看“笨办法学python”,之前用java做过一些小东西,对类,包,面向对象这些概念不陌生,所以语法这块看的很快,浏览一遍文档,一些基础的语法格式就可以用了,语法这块必须放在第一步看,学会怎么定义一个函数,变量赋值,逻辑运算,变量传递等。Pcharm写代码很容易,它有联想功能,变量,函数,包只需要打首字母就可以了。代码写的有问题时反过去看文档,记忆会更深刻。

开始做的一些语法练习


  1. <font style="font-size: 14px"># this is my python parctice first day,let's enjoy it!
  2. #-*- coding;utf-8
  3. print("hello world")
  4. print("i am testing")
  5. print("test=", 100 / 30)
  6. w = "i am"
  7. g = " a man"
  8. print(w + g)
  9. print(len(w))
  10. def testraw(testinput,count):
  11.     print("inputis=", testinput)
  12.     count=count+10
  13.     print("count=",count)
  14. testraw("123456",100)

  15. def comparenum(people,cats):
  16.     if(people>cats):
  17.         print("people num dayu cats")
  18.     else:
  19.         print("peole num xuaoyu cats")

  20. comparenum(100,50)
  21. def cycle():
  22.     arr = [3,2,11,12,4,5,6]
  23.     for i in range(0,6):
  24.         print(arr[i])

  25. class zifutry(object):
  26.     def zifutest(self,zifuyin):
  27.         print("zifu=",zifuyin)
  28.     def another(self,chuandi):
  29.         self.zifutest(chuandi)
  30. a = zifutry()
  31. a.another("shuage")</font>
复制代码


第二阶段:想好自己的目标需要什么样的资源。

  看完语法后我开始搜索GUI界面需要的组件了,Calculator 构成很简单,按键加文本框,按键按下后要有响应,要能识别不同按键按下代表不同的含义。学按键这块我就体会到python的强大了,也就是signal与slot的用法。


上代码:这句的意思是导入sys 块导入要用到的包。我用到组件很少,都在QtWiget包里



import sys
from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QPlainTextEdit #导入代码用到的组件

定义一个类,类名为Calculaor,这个类的类型为QWidget,不写QWidget的后果就是这个类里你没办法用它里面包含的方法,写图形界面的类要注意定义成这种的。

Def 了一个初始化函数,super()._intit_()这句和类的继承有关,Self.InitUI(),self又是python的一个特色,这是Calulator 类的一个实例,这里调用了InitUi方法。 self.wenben,是定义了类里的一个全局变量。

class Calculator(QWidget):
    def __init__(self):
        super().__init__()
        self.InitUI()
        self.wenben = ''#定义一个QWidget类里的全局变量,该类里的方法均可使用该变量

Def initUI 函数里创建文本框,设置文本框大小,创建按键,定义按键及设置按键位置,按键创建是相似的,就不贴了。

def InitUI(self):
    #创建文本框
    self.text = QPlainTextEdit(self)
    self.text.setGeometry(30, 15, 300, 40)
    #创建按键
    btn1 = QPushButton('1', self)
    btn1.move(50, 80)
    btn2 = QPushButton('2', self)
    btn2.move(150, 80)

我的组件用的全部是绝对布局的方式,每个组件都要设一遍位置,很麻烦,后面优化了一个版本,加上了垂直布局和网格布局,代码量又少了很多,更容易维护



设定死Widget框的大小,不可拉伸,可拉伸会显得很奇怪

self.setMaximumHeight(300)
self.setMinimumHeight(300)
self.setMaximumWidth(500)
self.setMinimumWidth(500)
self.setWindowTitle('Cacluator 尝鲜版 见南山友情制作 V0.2')



设定按键触发的槽,槽就是一个方法,按下后会调到这个方法了,我定义的槽“NumButtonClick”

btn1.clicked.connect(self.NumButtonClick)

进入NumButtonClick中,try+except是捕获异常用的,无论代码运行出现什么异常,用这个方法捕获并处理是非常好的做法。

Sender()这个方法里保存有按键按下发射的信息。

还需要转用text()方法获取到相关的字符

def NumButtonClick(self):
    try:
        sender = self.sender()    #接收按键发射的信息
        value = sender.text()



打印出来看看


这里就是计算器代码的实现了,非常简单 主要是数据处理都交给eval这个函数了,这个函数可以处理一串符合运算法则的字符,如“a+b=”,用这个方法直接就能得出结果,少了自己处理字符这个过程,代码量少了很多。


if value != 'R':            #清除键没有按下
    if value != '=':        #等号没有按下则执行字符串拼接操作
        self.wenben = self.wenben+value
        self.text.setPlainText(self.wenben)  #将键入的字符用PlainText控件在文本框显示出来
        print('wenben',self.wenben)
    else:
        Result = eval(self.wenben)   #如果键入等于,则用eval 函数处理字符串表达式(非常方便)
        Result = str(Result)
        self.text.setPlainText(Result)
else:                                 #清空键按下,执行文本框清空操作
    self.wenben = ''
    self.text.setPlainText(self.wenben)




代码写完之后run下(绝对布局的界面):

垂直布局+网格布局的界面

代码打包成exe格式。

在py文件路径下输入cmd

输入命令 Pyinstaller -F -w xx.py

打包成exe格式,就可以分享给其它小伙伴了!



完整的Word格式文档51黑下载地址:
Python学习笔记.docx (305.84 KB, 下载次数: 21)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表