天天看點

Python3的桌面程式開發利器:Eric6的環境搭建、使用

本文旨在通過一個簡單的demo,介紹基于Python3、PyQT5的環境下開發桌面應用程式的一種方案,當然開發Python的桌面應用程式不止是PyQT 這一種方案,還可以使用Python自帶的Tkinter 來實作。

本文目錄:

    • 1. 安裝依賴環境
    • 2. 安裝Eric6
    • 3. 配置Eric
    • 4. 建立視窗應用
      • 4.1 建立窗體UI
      • 4.2 實作代碼邏輯
    • 5. 打包py腳本輸出exe
      • 5.1 安裝pyinstaller
      • 5.2 打包輸出exe程式
    • 參考資料:

1. 安裝依賴環境

Eric6官網:http://eric-ide.python-projects.org/

Eric6 依賴的元件必須先安裝好,依賴元件清單如下:

依賴:
為了使用 eric6 你應該預先安裝好下列元件:

- 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)
           

元件太多,并且他們之間的依賴關系一言不合就出錯,這裡介紹個比較好的內建環境 Anaconda3 (64-bit) ,用它來安裝Pyqt等可以比較省心。

我本機的環境是:

- 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

是通過指令

pip3 install QScintilla

安裝的。

2. 安裝Eric6

依賴環境都搞定後,下載下傳Eric6:

Eric6穩定版官方下載下傳位址:Eric6-18 :點我去下載下傳

Python3的桌面程式開發利器:Eric6的環境搭建、使用

由于18.0版本開始沒有了漢化包(或者是現在到了18.10版本都還沒有出來?),我們可以用17.12裡面的中文包來達到漢化的目标。

Eric6-17.12:點我去下載下傳

Python3的桌面程式開發利器:Eric6的環境搭建、使用

下載下傳後,把18.10的主程式zip包解壓,然後把17.12這個中文語言包解壓,覆寫到18.10目錄,然後在cmd進入這個18.10主程式包解壓目錄,執行下面的指令安裝:

pyton install.py

安裝完成後啟動,輕按兩下

eric6.cmd

檔案啟動(我的因為是安裝了Anaconda3,是以這個cmd檔案所在路徑為:

C:ProgramDataAnaconda3Scripts

),如果界面是中文的表示前面的漢化操作成功。

這裡有個小問題,輕按兩下這個批處理啟動的時候,會一閃而過一個黑色的cmd視窗,不能忍,用一個簡單的方法搞定… ,給這個檔案建立個快捷方式發送到桌面,然後在這個快捷方式上右鍵屬性,在

運作方式

那裡把【

正常視窗

】改為 最小化:

Python3的桌面程式開發利器:Eric6的環境搭建、使用

然後點應用-确定,下次輕按兩下啟動就妥妥的看不到一閃而過的憂傷了…

3. 配置Eric

啟動eric6後,界面如下,可以看到中文漢化成功:

Python3的桌面程式開發利器:Eric6的環境搭建、使用

首次啟動,會自動彈出對配置對話框提示讓你配置資訊,如果你錯過了也沒關系,從Eric6的應用程式界面菜單

[設定-首選項]

進入,具體配置如下:

Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
從菜單的

插件-插件

存儲庫進入,安裝

jedi

插件:
Python3的桌面程式開發利器:Eric6的環境搭建、使用
最後配置一下預設工作目錄:
Python3的桌面程式開發利器:Eric6的環境搭建、使用

4. 建立視窗應用

4.1 建立窗體UI

Python3的桌面程式開發利器:Eric6的環境搭建、使用

然後項目檔案夾多了以下内容:

Python3的桌面程式開發利器:Eric6的環境搭建、使用
回到Eric6界面,左側的源碼Tab頁簽切換到GUI窗體頁簽,右鍵選擇

建立窗體

Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用

然後會引導你選擇位置儲存這個窗體檔案,然後會自動進入QT Designer設計界面:

Python3的桌面程式開發利器:Eric6的環境搭建、使用
這個界面,就跟MFC的設計界面差不多,哈哈,左側滑鼠按住

Push Button

按鈕控件不放,拖動至中間的窗體中,然後輕按兩下這個控件,輸入名字:

測試按鈕

,再添加一個text文本控件,然後設定窗體名字:
Python3的桌面程式開發利器:Eric6的環境搭建、使用

4.2 實作代碼邏輯

在前面設計好ui界面後,儲存代碼并關閉QT Designer視窗回到Eric6界面

然後在左側ui檔案上右鍵選擇

編譯窗體

生成ui界面元件對應的python代碼:
Python3的桌面程式開發利器:Eric6的環境搭建、使用
這時會在項目目錄生成一個Ui_Test.py 腳本檔案,内容如下:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:andyReperic6Test.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", "測試應用名"))
        self.pushButton.setText(_translate("dialog", "測試按鈕"))
        self.plainTextEdit.setPlainText(_translate("dialog", "點選按鈕,改變此處文本"))


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_())
           

裡面可以看到我們在窗體界面定義的兩個控件:按鈕、文本顯示的對應python類中的變量名為:

pushButton

plainTextEdit

接着在左側窗體視圖的UI檔案上右鍵選擇生成對話框代碼:
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
選擇對話框上兩個控件所需的響應事件後儲存:
Python3的桌面程式開發利器:Eric6的環境搭建、使用
然後切換到python源碼頁簽可以看到生成了一個py類檔案,裡面自動生成了剛才在對話框中選擇的兩個響應事件的代碼邏輯:
# -*- 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

           

我們修改下這個類:

  • 加上main方法
  • 修正引用的ui資源路徑:把這裡的

    from .Ui_Test import Ui_dialog

    那個點.去掉,否則會提示找不到這個子產品
  • 修改按鈕響應函數,改變文本控件顯示的内容
  • 修改文本内容改變響應函數,彈出一個消息提示框

修改完成的内容如下:

# -*- 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标簽的文本内容
        self.plainTextEdit.setPlainText(u"按鈕觸發,我改變了自己!")
    
    @pyqtSlot()
    def on_plainTextEdit_textChanged(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        reply = QMessageBox.question(self, '資訊', '文本框内容改變了',QMessageBox.Yes)
        
if __name__ == '__main__':
    
    #每一pyqt5應用程式必須建立一個應用程式對象。sys.argv參數是一個清單,從指令行輸入參數。
    app = QApplication(sys.argv)
    
    #QWidget部件是pyqt5所有使用者界面對象的基類。他為QWidget提供預設構造函數。預設構造函數沒有父類。
    dialog = dialog()
    
    #resize()方法調整視窗的大小。這離是400px寬248px高
    dialog.resize(400, 248)
    
    #設定視窗的标題
    dialog.setWindowTitle('我修改了标題')
    
    #顯示在螢幕上
    dialog.show()
    
    #系統exit()方法確定應用程式幹淨的退出
    #的exec_()方法有下劃線。因為執行是一個Python關鍵詞。是以,exec_()代替
    sys.exit(app.exec_())

           
然後點選Eric6應用的菜單:

項目-屬性

,配置主腳本為我們這個

Test.py

Python3的桌面程式開發利器:Eric6的環境搭建、使用
最後,通過菜單或者快捷鍵Ctrl+F2啟動我們這個對話框應用:
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用
Python3的桌面程式開發利器:Eric6的環境搭建、使用

點選按鈕後:

Python3的桌面程式開發利器:Eric6的環境搭建、使用

5. 打包py腳本輸出exe

5.1 安裝pyinstaller

下載下傳pyinstaller源碼,源碼github位址,有時候用git拉取下來網速很慢,這裡可以從csdn下載下傳我上傳的最新版本(20181026更新的):點我下載下傳20181026版本源碼
然後解壓這個源碼到某個目錄,cmd進入這個解壓目錄,通過以下指令安裝:

python setup.py install

Python3的桌面程式開發利器:Eric6的環境搭建、使用

5.2 打包輸出exe程式

然後來到我們的.py源碼目錄,通過以下指令打包成exe檔案:

pyinstaller -F -w -i "D:\xxxxxx\app.ico" Test.py

基礎的指令格式是 pyinstaller [opts] [目标程式.py]

可選的opts有:

-F, –onefile 打包成一個exe檔案。
-D, –onedir 建立一個目錄,包含exe檔案,但會依賴很多檔案(預設選項)。
-c, –console, –nowindowed 使用控制台,無界面(預設)
-w, –windowed, –noconsole 使用視窗,無控制台
           

-i "D:\xxxxxx\app.ico"

這個是更改exe的icon,如果不需要可以去掉。

最後打包出來的exe有35MB大小… 因為把QT核心的dll檔案打包在一起了,否則在沒有安裝python以及PyQt的電腦上無法運作的。

更多内容請檢視:pyinstaller官方說明

參考資料:

[1]: Pyqt5官方文檔

[2]: Python3官方文檔

[3]: 廖雪峰老師的Python3 線上學習手冊

[4]: 菜鳥學堂-Python3線上學習

[5]: 其他所有分享過python學習填坑網友的經驗