micropython教程(Python集成开发环境)
本文旨在通過(guò)一個(gè)簡(jiǎn)單的demo,介紹基于Python3、PyQT5的環(huán)境下開(kāi)發(fā)桌面應(yīng)用程序的一種方案,當(dāng)然開(kāi)發(fā)Python的桌面應(yīng)用程序不止是PyQT 這一種方案,還可以使用Python自帶的Tkinter 來(lái)實(shí)現(xiàn)。
1. 安裝依賴環(huán)境
Eric6官網(wǎng):http://eric-ide.python-projects.org/
Eric6 依賴的組件必須先安裝好,依賴組件列表如下:
依賴:
為了使用 eric6 你應(yīng)該預(yù)先安裝好下列組件:
- Python 3.4.0 or better
- Python 2.7.10 or better
- Qt 5.3.0 or better (from The Qt Company)
- Qt 4.8.0 or better (from The Qt Company)
- PyQt 5.3.0 or better (from Riverbank)
- PyQt 4.10.0 or better (from Riverbank)
- QScintilla 2.8.0 or better (from Riverbank)
組件太多,并且他們之間的依賴關(guān)系一言不合就出錯(cuò),這里介紹個(gè)比較好的集成環(huán)境 Anaconda3 (64-bit) ,用它來(lái)安裝Pyqt等可以比較省心。
我本機(jī)的環(huán)境是:
- Win7 64位
- Anaconda 3-5.2.0-Windows-x86_64
- Python 3.6.5
- pip 10.0.1
- Eric6 18.10
- Pyqt 5.9.2
- QScintilla
- PyInstaller 3.5.dev0
其中QScintilla 是通過(guò)命令pip3 install QScintilla安裝的。
2. 安裝Eric6
依賴環(huán)境都搞定后,下載Eric6:
Eric6穩(wěn)定版官方下載地址:Eric6-18 :點(diǎn)我去下載
由于18.0版本開(kāi)始沒(méi)有了漢化包(或者是現(xiàn)在到了18.10版本都還沒(méi)有出來(lái)?),我們可以用17.12里面的中文包來(lái)達(dá)到漢化的目標(biāo)。
Eric6-17.12:點(diǎn)我去下載
下載后,把18.10的主程序zip包解壓,然后把17.12這個(gè)中文語(yǔ)言包解壓,覆蓋到18.10目錄,然后在cmd進(jìn)入這個(gè)18.10主程序包解壓目錄,執(zhí)行下面的命令安裝:
pyton install.py
安裝完成后啟動(dòng),雙擊eric6.cmd文件啟動(dòng)(我的因?yàn)槭前惭b了Anaconda3,所以這個(gè)cmd文件所在路徑為:C:\ProgramData\Anaconda3\Scripts),如果界面是中文的表示前面的漢化操作成功。
這里有個(gè)小問(wèn)題,雙擊這個(gè)批處理啟動(dòng)的時(shí)候,會(huì)一閃而過(guò)一個(gè)黑色的cmd窗口,不能忍,用一個(gè)簡(jiǎn)單的方法搞定… ,給這個(gè)文件創(chuàng)建個(gè)快捷方式發(fā)送到桌面,然后在這個(gè)快捷方式上右鍵屬性,在運(yùn)行方式那里把【常規(guī)窗口】改為 最小化:
然后點(diǎn)應(yīng)用-確定,下次雙擊啟動(dòng)就妥妥的看不到一閃而過(guò)的憂傷了…
3. 配置Eric
啟動(dòng)eric6后,界面如下,可以看到中文漢化成功:
首次啟動(dòng),會(huì)自動(dòng)彈出對(duì)配置對(duì)話框提示讓你配置信息,如果你錯(cuò)過(guò)了也沒(méi)關(guān)系,從Eric6的應(yīng)用程序界面菜單[設(shè)置-首選項(xiàng)]進(jìn)入,具體配置如下:
從菜單的
插件-插件存儲(chǔ)庫(kù)進(jìn)入,安裝jedi插件:
最后配置一下默認(rèn)工作目錄:
4. 創(chuàng)建窗口應(yīng)用
4.1 創(chuàng)建窗體UI
然后項(xiàng)目文件夾多了以下內(nèi)容:
回到Eric6界面,左側(cè)的源碼Tab頁(yè)簽切換到GUI窗體頁(yè)簽,右鍵選擇
新建窗體:
然后會(huì)引導(dǎo)你選擇位置保存這個(gè)窗體文件,然后會(huì)自動(dòng)進(jìn)入QT Designer設(shè)計(jì)界面:
這個(gè)界面,就跟MFC的設(shè)計(jì)界面差不多,哈哈,左側(cè)鼠標(biāo)按住
Push Button按鈕控件不放,拖動(dòng)至中間的窗體中,然后雙擊這個(gè)控件,輸入名字:測(cè)試按鈕,再添加一個(gè)text文本控件,然后設(shè)置窗體名字:
4.2 實(shí)現(xiàn)代碼邏輯
在前面設(shè)計(jì)好ui界面后,保存代碼并關(guān)閉QT Designer窗口回到Eric6界面
然后在左側(cè)ui文件上右鍵選擇
編譯窗體生成ui界面組件對(duì)應(yīng)的python代碼:
這時(shí)會(huì)在項(xiàng)目目錄生成一個(gè)Ui_Test.py 腳本文件,內(nèi)容如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:\andy\Rep\eric6\Test.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_dialog(object):
def setupUi(self, dialog):
dialog.setObjectName("dialog")
dialog.resize(400, 343)
dialog.setSizeGripEnabled(True)
# 定義的按鈕
self.pushButton = QtWidgets.QPushButton(dialog)
self.pushButton.setGeometry(QtCore.QRect(130, 120, 75, 23))
self.pushButton.setObjectName("pushButton")
# 定義的文本
self.plainTextEdit = QtWidgets.QPlainTextEdit(dialog)
self.plainTextEdit.setGeometry(QtCore.QRect(110, 170, 181, 31))
self.plainTextEdit.setObjectName("plainTextEdit")
self.retranslateUi(dialog)
QtCore.QMetaObject.connectSlotsByName(dialog)
def retranslateUi(self, dialog):
_translate = QtCore.QCoreApplication.translate
dialog.setWindowTitle(_translate("dialog", "測(cè)試應(yīng)用名"))
self.pushButton.setText(_translate("dialog", "測(cè)試按鈕"))
self.plainTextEdit.setPlainText(_translate("dialog", "點(diǎn)擊按鈕,改變此處文本"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
dialog = QtWidgets.QDialog()
ui = Ui_dialog()
ui.setupUi(dialog)
dialog.show()
sys.exit(app.exec_())
里面可以看到我們?cè)诖绑w界面定義的兩個(gè)控件:按鈕、文本顯示的對(duì)應(yīng)python類(lèi)中的變量名為:pushButton、plainTextEdit
接著在左側(cè)窗體視圖的UI文件上右鍵選擇生成對(duì)話框代碼:
選擇對(duì)話框上兩個(gè)控件所需的響應(yīng)事件后保存:
然后切換到python源碼頁(yè)簽可以看到生成了一個(gè)py類(lèi)文件,里面自動(dòng)生成了剛才在對(duì)話框中選擇的兩個(gè)響應(yīng)事件的代碼邏輯:
# -*- coding: utf-8 -*-
""" Module implementing dialog. """
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog
from .Ui_Test import Ui_dialog
class dialog(QDialog, Ui_dialog):
""" Class documentation goes here. """
def __init__(self, parent=None):
""" Constructor @param parent reference to the parent widget @type QWidget """
super(dialog, self).__init__(parent)
self.setupUi(self)
@pyqtSlot()
def on_pushButton_clicked(self):
""" Slot documentation goes here. """
# TODO: not implemented yet
raise NotImplementedError
@pyqtSlot()
def on_plainTextEdit_textChanged(self):
""" Slot documentation goes here. """
# TODO: not implemented yet
raise NotImplementedError
我們修改下這個(gè)類(lèi):
- 加上main方法
- 修正引用的ui資源路徑:把這里的
from .Ui_Test import Ui_dialog那個(gè)點(diǎn).去掉,否則會(huì)提示找不到這個(gè)模塊 - 修改按鈕響應(yīng)函數(shù),改變文本控件顯示的內(nèi)容
- 修改文本內(nèi)容改變響應(yīng)函數(shù),彈出一個(gè)消息提示框
修改完成的內(nèi)容如下:
# -*- coding: utf-8 -*-
""" Module implementing dialog. """
import sys
#這里我們提供必要的引用。基本控件位于pyqt5.qtwidgets模塊中。
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog, QMessageBox
from Ui_Test import Ui_dialog
class dialog(QDialog, Ui_dialog):
""" Class documentation goes here. """
def __init__(self, parent=None):
""" Constructor @param parent reference to the parent widget @type QWidget """
super(dialog, self).__init__(parent)
self.setupUi(self)
@pyqtSlot()
def on_pushButton_clicked(self):
""" Slot documentation goes here. """
# 按鈕按下,改變label標(biāo)簽的文本內(nèi)容
self.plainTextEdit.setPlainText(u"按鈕觸發(fā),我改變了自己!")
@pyqtSlot()
def on_plainTextEdit_textChanged(self):
""" Slot documentation goes here. """
# TODO: not implemented yet
reply = QMessageBox.question(self, '信息', '文本框內(nèi)容改變了',QMessageBox.Yes)
if __name__ == '__main__':
#每一pyqt5應(yīng)用程序必須創(chuàng)建一個(gè)應(yīng)用程序?qū)ο蟆ys.argv參數(shù)是一個(gè)列表,從命令行輸入?yún)?shù)。
app = QApplication(sys.argv)
#QWidget部件是pyqt5所有用戶界面對(duì)象的基類(lèi)。他為QWidget提供默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)沒(méi)有父類(lèi)。
dialog = dialog()
#resize()方法調(diào)整窗口的大小。這離是400px寬248px高
dialog.resize(400, 248)
#設(shè)置窗口的標(biāo)題
dialog.setWindowTitle('我修改了標(biāo)題')
#顯示在屏幕上
dialog.show()
#系統(tǒng)exit()方法確保應(yīng)用程序干凈的退出
#的exec_()方法有下劃線。因?yàn)閳?zhí)行是一個(gè)Python關(guān)鍵詞。因此,exec_()代替
sys.exit(app.exec_())
然后點(diǎn)擊Eric6應(yīng)用的菜單:
項(xiàng)目-屬性,配置主腳本為我們這個(gè)Test.py:
最后,通過(guò)菜單或者快捷鍵Ctrl+F2啟動(dòng)我們這個(gè)對(duì)話框應(yīng)用:
點(diǎn)擊按鈕后:
5. 打包py腳本輸出exe
5.1 安裝pyinstaller
下載pyinstaller源碼,源碼github地址,有時(shí)候用git拉取下來(lái)網(wǎng)速很慢,這里可以從csdn下載我上傳的最新版本(20181026更新的):點(diǎn)我下載20181026版本源碼
然后解壓這個(gè)源碼到某個(gè)目錄,cmd進(jìn)入這個(gè)解壓目錄,通過(guò)以下命令安裝:
python setup.py install
5.2 打包輸出exe程序
然后來(lái)到我們的.py源碼目錄,通過(guò)以下命令打包成exe文件:
pyinstaller -F -w -i "D:\\xxxxxx\\app.ico" Test.py
基礎(chǔ)的命令格式是 pyinstaller [opts] [目標(biāo)程序.py]
可選的opts有:
-F, –onefile 打包成一個(gè)exe文件。
-D, –onedir 創(chuàng)建一個(gè)目錄,包含exe文件,但會(huì)依賴很多文件(默認(rèn)選項(xiàng))。
-c, –console, –nowindowed 使用控制臺(tái),無(wú)界面(默認(rèn))
-w, –windowed, –noconsole 使用窗口,無(wú)控制臺(tái)
-i "D:\\xxxxxx\\app.ico" 這個(gè)是更改exe的icon,如果不需要可以去掉。
最后打包出來(lái)的exe有35MB大小… 因?yàn)榘裃T核心的dll文件打包在一起了,否則在沒(méi)有安裝python以及PyQt的電腦上無(wú)法運(yùn)行的。
更多內(nèi)容請(qǐng)查看:pyinstaller官方說(shuō)明
參考資料:
[1]: Pyqt5官方文檔
[2]: Python3官方文檔
[3]: 廖雪峰老師的Python3 在線學(xué)習(xí)手冊(cè)
[4]: 菜鳥(niǎo)學(xué)堂-Python3在線學(xué)習(xí)
[5]: 其他所有分享過(guò)python學(xué)習(xí)填坑網(wǎng)友的經(jīng)驗(yàn)
總結(jié)
以上是生活随笔為你收集整理的micropython教程(Python集成开发环境)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SAP ABAP实用技巧介绍系列之 快速
- 下一篇: 微信小程序中怎么实现map地图