PyQt【第五篇】 PyQt5與Pycharm的極速 GUI 開發


安裝

為避免不兼容,均使用pip方式安裝

Python安裝

開發環境:

python3.5.2 64

win10 64bit

PyQt安裝

pip install PyQt5

3.測試是否安裝成功

import PyQt5

沒報錯說明安裝成功

Eric6安裝

可pip或源碼安裝

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

1.安裝依賴:pip install QScintilla

2.下載:eric6-17.03.1.zip並解壓,找到install.py文件打開方式改為剛剛安裝的python程序

3.安裝:然后雙擊該文件

4,啟動:然后找到...python\Lib\site-packages\eric6目錄下的eric6.py文件,雙擊啟動eric6

 

配置Eric6

 如果沒有自動彈出配置窗口的話自己手動打開配置窗口:設置->首選項。

示例

建立項目

打開Eric6,菜單欄中選擇項目-新建 

添加項目名稱並創立項目目錄

 

 

 在打開的選擇項目文件夾對話框中右鍵點擊空白處,在彈出的菜單中選擇新建-文件夾 

 

回到之前的界面,點"OK"

 

觀察程序主界面的標題欄發現顯示Hello – eric6。在項目瀏覽器的頂部源代碼標簽里自動為我們生成一個_init_.py文件,該文件中沒有任何代碼,我們不用去理會。 

創建窗體

點擊源代碼標簽右邊的窗體標簽,在標簽下面的空白處右鍵點擊,彈出的菜單選擇新建窗體 

 彈出新建窗體對話框,可以選擇其它窗體類型,這里我們使用默認對話框類型,點擊OK按鈕

給窗體命名,雙擊窗體也是這個錯誤

 

 

pip install PyQt5-tools -i https://pypi.douban.com/simple   # Python\Python35-32\Lib\site-packages\目錄下新增一個pyqt5-tools文件夾

把目錄pyqt5-tools文件夾下的兩個文件拷貝到目python35\Lib\site-packages\PyQt5\Qt\bin

設計窗體

雙擊窗體,計算機會直接打開Qt設計師,並自動將HelloWindow.ui加載到程序中 

 

配置Pycharm

配置環境

settings->tools->external tools

D:\app\python3\Lib\site-packages\pyqt5-tools\designer.exe
$ProjectFileDir$

D:\app\python3\python.exe
-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
$FileDir$

D:\app\python3\Scripts\pyrcc5.exe 
$FileName$ -o $FileNameWithoutExtension$_rc.py
D:\app\python3\Scripts

 

示例2

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\data\QtProject\test\test.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# 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(582, 374)
        Dialog.setSizeGripEnabled(True)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(200, 90, 81, 18))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(90, 230, 112, 34))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 230, 112, 34))
        self.pushButton_2.setObjectName("pushButton_2")

        self.retranslateUi(Dialog)
        self.pushButton_2.clicked.connect(Dialog.close)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "顯示"))
        self.pushButton.setText(_translate("Dialog", "確定"))
        self.pushButton_2.setText(_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_()) 
eric環境生成的ython代碼
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# 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(582, 374)
        Dialog.setSizeGripEnabled(True)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(200, 90, 81, 18))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(90, 230, 112, 34))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 230, 112, 34))
        self.pushButton_2.setObjectName("pushButton_2")

        self.retranslateUi(Dialog)
        self.pushButton_2.clicked.connect(Dialog.close)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "顯示"))
        self.pushButton.setText(_translate("Dialog", "確定"))
        self.pushButton_2.setText(_translate("Dialog", "關閉"))
python環境生成的代碼(沒有main)
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# 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(582, 374)
        Dialog.setSizeGripEnabled(True)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(200, 90, 81, 18))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(90, 230, 112, 34))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 230, 112, 34))
        self.pushButton_2.setObjectName("pushButton_2")

        self.retranslateUi(Dialog)
        self.pushButton_2.clicked.connect(Dialog.close)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "顯示"))
        self.pushButton.setText(_translate("Dialog", "確定"))
        self.pushButton_2.setText(_translate("Dialog", "關閉"))


class W(QtWidgets.QDialog, Ui_Dialog):  # 繼承實現類和QDialog類,以后eric代碼移植到pycharm只需要改這兩處
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 調用Ui_Dialog類的方法


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = W()
    w.show()
    sys.exit(app.exec_())


#eric代碼
# if __name__ == "__main__":
#     import sys
#     app = QtWidgets.QApplication(sys.argv)
#     Dialog = QtWidgets.QDialog()  # 這里放到W繼承類
#     ui = Ui_Dialog()
#     ui.setupUi(Dialog)
#     Dialog.show()
#     sys.exit(app.exec_())
完善pycharm類代碼

總結

eric有個問題: 智能提示很louw很難用(放棄eric編碼)

PyCharm有三個問題:
    1.只有類代碼沒有調用代碼(eric生成的python調用代碼,復制到pycharm)   
    2.pycharm停止運行,extratool調用的Qt會關閉(手動啟動Qt)
    3.pycharm每次把ui轉換為py文件會覆蓋上次內容(因此調用代碼要和類代碼分開,被調用代碼放到包目錄下)

總結:
    啟動eric建立ui文件然后編譯運行,復制ui文件和py調用代碼分別到pycharm包目錄和main.py
    手動啟動Qt打開pycharm下的ui文件
    關閉eric

  

  

  

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM