最近抽空看了下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写代码很容易,它有联想功能,变量,函数,包只需要打首字母就可以了。代码写的有问题时反过去看文档,记忆会更深刻。
开始做的一些语法练习
# 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")复制代码
第二阶段:想好自己的目标需要什么样的资源。
看完语法后我开始搜索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, 下载次数: 9)
2019-1-28 20:43 上传
点击文件名下载附件
下载积分: 黑币 -5