Python Gui開發(fā)(PyQt5)

一孙乖、Python GUI介紹

User Interface,簡稱 GUI逊抡,又稱圖形用戶接口荡含;是指采用圖形方式顯示的計算機操作用戶界面

GUI圖形用戶界面(Graphical

User Interface甚垦,簡稱 GUI茶鹃,又稱圖形用戶接口;是指采用圖形方式顯示的計算機操作用戶界面艰亮。

Python 作為腳本語言闭翩,起初并不具備GUI工具,但由于本身具有良好的可拓展性迄埃,目前有相當(dāng)多的GUI在python中使用

Python 常用GUI控件集有PyQt男杈、Tkinter、wxPython调俘、PyGUI伶棒、Kivy。

其中PyQt是Qt為python專門提供的GUI擴(kuò)展彩库。

二肤无、常用GUI對比

image

三、PyQt介紹及開發(fā)實踐
PyQt 是一個用于創(chuàng)建GUI應(yīng)用程序的跨平臺的工具包骇钦,它將Python編程語言和Qt庫 成功融合在一起宛渐。QT庫目前是最強大的GUI庫之一。

PyQt可以運行在所有主流操作系統(tǒng)上,包括UNIX窥翩,Windows和Mac OS 业岁。

自從Qt移植到Python 上形成PyQt以來,已經(jīng)發(fā)出PyQt3寇蚊, PyQt4笔时, PyQt5

PyQt提供GPL版和商業(yè)版

(1)安裝:

Ubuntu下:
uPyqt庫: sudoapt-get install python-pyqt5
uQt-designer: sudo apt-get install qt5-designer
upyuic5 : sudo apt install pyqt5-dev-tools
uPyInstaller : pip install PyInstaller

Windows下:
進(jìn)入pip目錄(cd C:\Python34\Scripts)
PyQt5庫:
pip3install SIP
pip3install PyQt5
PyInstaller : pip install PyInstaller

(2)開發(fā)過程介紹(以下均以windows下為例)
1、Qt Designer 畫圖(Ctrl+R 預(yù)覽) .ui
2仗岸、.ui轉(zhuǎn)換為.py
方法:pyuic5 -o a.py a.ui
3允耿、邏輯文件視情況開發(fā)完成業(yè)務(wù)邏輯
4、pyinstaller 打包.py轉(zhuǎn)換為.exe(windows下可運行文件)

(3)Pyinstaller
Pyinstaller把python解釋器和腳本打包成一個可執(zhí)行文件扒怖,和編譯成真正的機器代碼是兩回事较锡。
打包后的可執(zhí)行文件不具備可移植性,若要在不同操作系統(tǒng)上運行盗痒,就必須在該系統(tǒng)上重新進(jìn)行打包
安裝pip install PyInstaller
配置環(huán)境變量:
QT_QPA_PLATFORM_PLUGIN_PATH
C:\Python34\

image.png

image.png

不配置環(huán)境變量蚂蕴,點擊打包后的.exe運行Lib\site-packages\PyQt5\plugins
注:后直接閃退
提示:This application failed to start
because it could not find or load the Qt platform plugin “windows”.
打包命令:pyinstaller-F -pC:\python34;C:\Python34\Lib\site-packages\PyQt5; call_tools.py
?-F,-onfile .打包成一個.exe文件
?-p,依賴包所在文件

四、實踐代碼
(1)pyqt designer畫圖

image

(2)轉(zhuǎn)換為.py文件
pyuic5 -o firstPyQt51.py firstPyQt51.ui

生成的firstPyQt51.py如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
   def setupUi(self, Form):
       Form.setObjectName("Form")
       Form.resize(400, 300)
       self.pushButton = QtWidgets.QPushButton(Form)
       self.pushButton.setGeometry(QtCore.QRect(140, 60, 99, 27))
       self.pushButton.setObjectName("pushButton")
       self.retranslateUi(Form)
       self.pushButton.clicked.connect(self.firtPyQt5_button_click)
       QtCore.QMetaObject.connectSlotsByName(Form)

   def retranslateUi(self, Form):
       _translate = QtCore.QCoreApplication.translate
       Form.setWindowTitle(_translate("Form", "Form"))
       self.pushButton.setText(_translate("Form", "PushButton"))

   #接下修改下firstPyQt5.py文件俯邓,主要是去實現(xiàn)slot函數(shù)掂墓,因為之前在QtDesigner里沒有實現(xiàn),讓它彈出一個消息框

   def firtPyQt5_button_click(self):
       QtWidgets.QMessageBox.information(self.pushButton,"標(biāo)題","這是第一個PyQt5 GUI程序")

(3)編寫執(zhí)行excute.py文件
excute.py內(nèi)容如下

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget    #導(dǎo)入相應(yīng)的包
from PyQt5.QtWidgets import QApplication , QMainWindow
from firstPyQt51 import *

if __name__ == '__main__':
   """
   主函數(shù)
   """
   app = QApplication(sys.argv)
   #app = QApplication(sys.argv)看成,每一個pyqt程序必須創(chuàng)建一個application對象君编,
   #sys.argv是命令行參數(shù),可以通過命令啟動的時候傳遞參數(shù)川慌。
   mainWindow = QMainWindow()
   #生成過一個實例(對象), mainWindow是實例(對象)的名字吃嘿,可以隨便起。
   ui = Ui_Form()
   ui.setupUi(mainWindow)
   mainWindow.show()  #用來顯示窗口
   sys.exit(app.exec_())#exec_()方法的作用是“進(jìn)入程序的主循環(huán)直到exit()被調(diào)

(4)執(zhí)行python excute.py后點擊”PushButton"彈出以下界面

image

注意:如出現(xiàn)以下2個問題梦重,請檢查python兑燥,安裝模塊,電腦位數(shù)是否一致(64/32位)

ImportError: DLL load failed: %1 不是有效的 Win32 應(yīng)用程序
ImportError: DLL load failed: %1 找不到指定的模塊
出現(xiàn)以上問題琴拧,卸載后請安裝重試降瞳,再次執(zhí)行以下重試
1) 切換到python安裝目錄,cd C:\Python36
2) pip3 install SIP
3) pip3 install PyQt5 
注意:電腦位數(shù)蚓胸,python 位數(shù)挣饥,PyQt5庫的位數(shù)對應(yīng)

以上歡迎指正~~~
參考書籍:PyQt5快速開發(fā)和實踐

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者沛膳。
  • 序言:七十年代末扔枫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锹安,更是在濱河造成了極大的恐慌短荐,老刑警劉巖倚舀,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忍宋,居然都是意外死亡痕貌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門糠排,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舵稠,“玉大人,你說我怎么就攤上這事乳讥。” “怎么了廓俭?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵云石,是天一觀的道長。 經(jīng)常有香客問我研乒,道長汹忠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任雹熬,我火速辦了婚禮宽菜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竿报。我一直安慰自己铅乡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布烈菌。 她就那樣靜靜地躺著阵幸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芽世。 梳的紋絲不亂的頭發(fā)上挚赊,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音济瓢,去河邊找鬼荠割。 笑死,一個胖子當(dāng)著我的面吹牛旺矾,可吹牛的內(nèi)容都是我干的蔑鹦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼箕宙,長吁一口氣:“原來是場噩夢啊……” “哼举反!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扒吁,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤火鼻,失蹤者是張志新(化名)和其女友劉穎室囊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魁索,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡融撞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粗蔚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尝偎。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鹏控,靈堂內(nèi)的尸體忽然破棺而出致扯,到底是詐尸還是另有隱情,我是刑警寧澤当辐,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布抖僵,位于F島的核電站,受9級特大地震影響缘揪,放射性物質(zhì)發(fā)生泄漏耍群。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一找筝、第九天 我趴在偏房一處隱蔽的房頂上張望蹈垢。 院中可真熱鬧,春花似錦袖裕、人聲如沸曹抬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沐祷。三九已至,卻和暖如春攒岛,著一層夾襖步出監(jiān)牢的瞬間赖临,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工灾锯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兢榨,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓顺饮,卻偏偏與公主長得像吵聪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兼雄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容