最近抽空看了下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写代码很容易,它有联想功能,变量,函数,包只需要打首字母就可以了。代码写的有问题时反过去看文档,记忆会更深刻。 开始做的一些语法练习
- <font style="font-size: 14px"># this is my python parctice first day,let's enjoy it!
- #-*- coding;utf-8
- print("hello world")
- print("i am testing")
- print("test=", 100 / 30)
- w = "i am"
- g = " a man"
- print(w + g)
- print(len(w))
- def testraw(testinput,count):
- print("inputis=", testinput)
- count=count+10
- print("count=",count)
- testraw("123456",100)
- def comparenum(people,cats):
- if(people>cats):
- print("people num dayu cats")
- else:
- print("peole num xuaoyu cats")
- comparenum(100,50)
- def cycle():
- arr = [3,2,11,12,4,5,6]
- for i in range(0,6):
- print(arr[i])
- class zifutry(object):
- def zifutest(self,zifuyin):
- print("zifu=",zifuyin)
- def another(self,chuandi):
- self.zifutest(chuandi)
- a = zifutry()
- 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)
|