最近抽空看了下python的學(xué)習(xí)文檔,發(fā)現(xiàn)開發(fā)工具以及資料支持對(duì)開發(fā)者相當(dāng)?shù)挠押茫啾戎拢郧坝肨CL&Tk做的項(xiàng)目主要缺點(diǎn)有兩個(gè):1,開發(fā)難度大,調(diào)試手段只有靠print一種,而且語法錯(cuò)誤也經(jīng)常定位不準(zhǔn)確。2.維護(hù)難度大,目前已經(jīng)成型T口工具函數(shù)參數(shù)傳遞基本是全局變量global傳遞,且需求有點(diǎn)變更就要加函數(shù),導(dǎo)致代碼越來越臃腫,debug起來不方便。
以上問題用Python開發(fā)是不存在的。基于以上訴求,我通過自己設(shè)計(jì),開發(fā)一款可以在Windows 上運(yùn)行的計(jì)算器小插件,達(dá)到掌握Python 語法 GUI界面控件入門的目的。
學(xué)習(xí)前準(zhǔn)備:
我的電腦裝這個(gè)會(huì)報(bào)錯(cuò)

我裝的是64位的python-3.7.2-amd64,這個(gè)在python.org 官網(wǎng)都有下載
安裝完成后 在cmd敲命令,如果顯示沒有該指令,則需要如下指令添加環(huán)境變量
path=%path%;C:\Python37(python安裝路徑)
同理,pip工具(下載庫以及輔助開發(fā)工具)也需要添加環(huán)境變量
path=%path%;C:\Python37\Scripts (pip 安裝路徑)
環(huán)境變量安裝成功后cmd執(zhí)行命令:
Pip install PyQt5
Pip install PyQt5-tools
Pip install Pyinstaller
File-setting-project-project interpreter 路徑定位到python安裝的位置

軟件安裝到此結(jié)束。
項(xiàng)目開發(fā)階段:
期望:開發(fā)一個(gè)可以多位數(shù)加減乘除運(yùn)算的界面。
第一階段:語法學(xué)習(xí),看“笨辦法學(xué)python”,之前用java做過一些小東西,對(duì)類,包,面向?qū)ο筮@些概念不陌生,所以語法這塊看的很快,瀏覽一遍文檔,一些基礎(chǔ)的語法格式就可以用了,語法這塊必須放在第一步看,學(xué)會(huì)怎么定義一個(gè)函數(shù),變量賦值,邏輯運(yùn)算,變量傳遞等。Pcharm寫代碼很容易,它有聯(lián)想功能,變量,函數(shù),包只需要打首字母就可以了。代碼寫的有問題時(shí)反過去看文檔,記憶會(huì)更深刻。
開始做的一些語法練習(xí)
第二階段:想好自己的目標(biāo)需要什么樣的資源。
看完語法后我開始搜索GUI界面需要的組件了,Calculator 構(gòu)成很簡單,按鍵加文本框,按鍵按下后要有響應(yīng),要能識(shí)別不同按鍵按下代表不同的含義。學(xué)按鍵這塊我就體會(huì)到python的強(qiáng)大了,也就是signal與slot的用法。

上代碼:這句的意思是導(dǎo)入sys 塊導(dǎo)入要用到的包。我用到組件很少,都在QtWiget包里
import sys
from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QPlainTextEdit #導(dǎo)入代碼用到的組件
定義一個(gè)類,類名為Calculaor,這個(gè)類的類型為QWidget,不寫QWidget的后果就是這個(gè)類里你沒辦法用它里面包含的方法,寫圖形界面的類要注意定義成這種的。
Def 了一個(gè)初始化函數(shù),super()._intit_()這句和類的繼承有關(guān),Self.InitUI(),self又是python的一個(gè)特色,這是Calulator 類的一個(gè)實(shí)例,這里調(diào)用了InitUi方法。 self.wenben,是定義了類里的一個(gè)全局變量。
class Calculator(QWidget):
def __init__(self):
super().__init__()
self.InitUI()
self.wenben = ''#定義一個(gè)QWidget類里的全局變量,該類里的方法均可使用該變量
Def initUI 函數(shù)里創(chuàng)建文本框,設(shè)置文本框大小,創(chuàng)建按鍵,定義按鍵及設(shè)置按鍵位置,按鍵創(chuàng)建是相似的,就不貼了。
def InitUI(self):
#創(chuàng)建文本框
self.text = QPlainTextEdit(self)
self.text.setGeometry(30, 15, 300, 40)
#創(chuàng)建按鍵
btn1 = QPushButton('1', self)
btn1.move(50, 80)
btn2 = QPushButton('2', self)
btn2.move(150, 80)
我的組件用的全部是絕對(duì)布局的方式,每個(gè)組件都要設(shè)一遍位置,很麻煩,后面優(yōu)化了一個(gè)版本,加上了垂直布局和網(wǎng)格布局,代碼量又少了很多,更容易維護(hù)
設(shè)定死Widget框的大小,不可拉伸,可拉伸會(huì)顯得很奇怪
self.setMaximumHeight(300)
self.setMinimumHeight(300)
self.setMaximumWidth(500)
self.setMinimumWidth(500)
self.setWindowTitle('Cacluator 嘗鮮版 見南山友情制作 V0.2')
設(shè)定按鍵觸發(fā)的槽,槽就是一個(gè)方法,按下后會(huì)調(diào)到這個(gè)方法了,我定義的槽“NumButtonClick”
btn1.clicked.connect(self.NumButtonClick)
進(jìn)入NumButtonClick中,try+except是捕獲異常用的,無論代碼運(yùn)行出現(xiàn)什么異常,用這個(gè)方法捕獲并處理是非常好的做法。
Sender()這個(gè)方法里保存有按鍵按下發(fā)射的信息。
還需要轉(zhuǎn)用text()方法獲取到相關(guān)的字符
def NumButtonClick(self):
try:
sender = self.sender() #接收按鍵發(fā)射的信息
value = sender.text()
打印出來看看
這里就是計(jì)算器代碼的實(shí)現(xiàn)了,非常簡單 主要是數(shù)據(jù)處理都交給eval這個(gè)函數(shù)了,這個(gè)函數(shù)可以處理一串符合運(yùn)算法則的字符,如“a+b=”,用這個(gè)方法直接就能得出結(jié)果,少了自己處理字符這個(gè)過程,代碼量少了很多。
if value != 'R': #清除鍵沒有按下
if value != '=': #等號(hào)沒有按下則執(zhí)行字符串拼接操作
self.wenben = self.wenben+value
self.text.setPlainText(self.wenben) #將鍵入的字符用PlainText控件在文本框顯示出來
print('wenben',self.wenben)
else:
Result = eval(self.wenben) #如果鍵入等于,則用eval 函數(shù)處理字符串表達(dá)式(非常方便)
Result = str(Result)
self.text.setPlainText(Result)
else: #清空鍵按下,執(zhí)行文本框清空操作
self.wenben = ''
self.text.setPlainText(self.wenben)
代碼寫完之后run下(絕對(duì)布局的界面):

垂直布局+網(wǎng)格布局的界面

代碼打包成exe格式。
在py文件路徑下輸入cmd
輸入命令 Pyinstaller -F -w xx.py
打包成exe格式,就可以分享給其它小伙伴了!
Python學(xué)習(xí)筆記.docx
(305.84 KB, 下載次數(shù): 21)
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |