学pyqt5之前需要学python吗_快速学习pyqt5(1)--入门
學(xué)習(xí)于:PyQt5圖形界面編程 想要系統(tǒng)學(xué)習(xí)的同學(xué)建議可以去這個專欄好好學(xué)習(xí),沒有任何語言基礎(chǔ)和計算機基礎(chǔ)的也建議直接去看那個專欄。我這里是有java基礎(chǔ)了,所以就不重復(fù),針對快速學(xué)習(xí)使用。
學(xué)習(xí)這個的目的是完成學(xué)校的SIT項目,所以在這里記錄完成這個項目的全部過程。至于軟件的安裝,環(huán)境的搭建之類的,大家可以去看那個專欄,我就不復(fù)述了。我使用的是spyder進(jìn)行編程,基于python3.7的環(huán)境。
然后編程方式有兩種:1.直接手寫全部代碼 2.使用工具拖拽完成(如eric6、designer)
第一個問題:運行代碼的時候出現(xiàn) kernel died, restarting 提示
解決方法 :在命令行輸入conda update spyder即可
首先,第一份代碼:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('my first windows')
w.show()
sys.exit(app.exec_())
解釋:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
導(dǎo)入相關(guān)的包,PyQt5.QtWidgets里面的QApplication, QWidget
作用:QtWidgets模塊包含了一整套UI元素組件,用于建立符合系統(tǒng)風(fēng)格的classic界面,非常方便,可以在安裝時選擇是否使用此功能。
if __name__ == '__main__':
這個屬于Python基礎(chǔ)知識,如果寫了這句話并將執(zhí)行的語句放到這個判斷語句的后面,那么只有在程序本身被執(zhí)行的時候才能運行這個判斷語句下面的語句。否則程序被作為模塊導(dǎo)入的時候就不會執(zhí)行(這個建議自己找本書或視頻看,我的理解就是,你直接運行這個文件時,此時__name_屬性就等于_main__,那么就會運行下面的代碼,否則,如果作為模塊導(dǎo)入,就不運行)。注意python是不需要括號來規(guī)范的,只需要保持對齊即可。
app = QApplication(sys.argv)
每個PyQt5應(yīng)用程序必須創(chuàng)建一個應(yīng)用程序?qū)ο蟆?sys.argv參數(shù)是來自命令行的參數(shù)列表。 Python腳本可以從shell運行。 寫了這句話就能讓我們的程序從命令行啟動。
w = QWidget()
QWidget小部件是PyQt5中所有用戶界面對象的基類。 我們提供了QWidget的默認(rèn)構(gòu)造函數(shù)。 默認(rèn)構(gòu)造函數(shù)沒有父類。 沒有父類口小部件稱為窗口。
w.resize(250, 150)
resize()方法調(diào)整窗口小部件的大小。這里我們設(shè)定窗口的大小:寬250像素,高150像素。
w.move(300, 300)
move()方法將小部件移動到屏幕上x = 300,y = 300坐標(biāo)處的位置。這里我們來看一下屏幕坐標(biāo)是怎么設(shè)定的,來看看下圖。
通過上圖我們可以知曉,坐標(biāo)原點是從哪里開始計算的,我們要是將程序中的(300,300)這個坐標(biāo)改成(0,0),窗口就會跑到左上角去了,大家可以試試。
w.setWindowTitle('my first windows')
這個方法顧名思義,就是設(shè)置窗口的標(biāo)題。
w.show()
show()方法在屏幕上顯示窗口小部件。 一個小部件首先在內(nèi)存中創(chuàng)建,然后在屏幕上顯示。
sys.exit(app.exec_())
最后,我們進(jìn)入應(yīng)用程序的主循環(huán)(main loop)。 事件處理從這一點開始。 主循環(huán)(main loop)從窗口系統(tǒng)接收事件并將它們分派到應(yīng)用程序小部件。 如果我們調(diào)用exit()方法或者主窗口小部件被破壞,那么主循環(huán)(main loop)就會結(jié)束。
sys.exit()方法確保一個干凈的退出。
exec_()方法有一個下劃線。 這是因為exec是一個Python關(guān)鍵字。 因此,使用exec_()。
GUI應(yīng)用程序都是事件驅(qū)動的。比如鍵盤事件、鼠標(biāo)事件等等。還有一些事件來自于系統(tǒng)內(nèi)部,比如定時事件、其它文件事件等等。在沒有任何事件的情況下,應(yīng)用程序處于睡眠狀態(tài)。這種事件驅(qū)動機制,GUI應(yīng)用程序都需要一個主循環(huán)(main loop)。主循環(huán)(main loop)控制應(yīng)用程序什么時候進(jìn)入睡眠狀態(tài),什么時候被喚醒。所以主循環(huán)(main loop)就是干這個的。
然后第一步走到這里就算有基本認(rèn)知了。
然后用面向?qū)ο缶帉?#xff1a;(大佬寫的那個格式不對,調(diào)整了一下)
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Ico(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('學(xué)點編程吧出品')
self.setWindowIcon(QIcon('aa.ico'))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Ico()
sys.exit(app.exec_())
解釋: 這里有一個類,類名為Ico,它的父類為QWidg,通過( )即括號實現(xiàn)繼承。里面有兩個函數(shù),init和initUI。init是構(gòu)造函數(shù),創(chuàng)建實例的時候(即下面ex=Ico(),這里不像java那樣要使用new關(guān)鍵字進(jìn)行實例的生成)就會自動調(diào)用init這個函數(shù)。init里面的super代表調(diào)用父類的init方法,這樣就可以使用父類的東西,然后接著調(diào)用自己的initUI函數(shù)。
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('學(xué)點編程吧出品')
self.setWindowIcon(QIcon('xdbcb8.ico'))
上面的三種方法都已經(jīng)從QWidget類中繼承的。 setGeometry()做了兩件事情:它在屏幕上定位窗口并設(shè)置它的大小;前兩個參數(shù)是窗口的x和y位置;第三個是寬度;第四個是窗口的高度。實際上,它在一個方法中組合了resize()和move()方法。 最后一個方法設(shè)置應(yīng)用程序圖標(biāo)。 為此,我們創(chuàng)建了一個QIcon對象。 QIcon接收到我們要顯示的圖標(biāo)的路徑(和當(dāng)前程序在同一個目錄下,我是直接網(wǎng)上隨便下載了個ico文件)。最后的self.show()就是這個窗體的顯示了。
然后到這里,我發(fā)現(xiàn)它每個函數(shù)的參數(shù)都有個self,這個就相當(dāng)于this,也就是生成這個類的實例自己。java中一般都不寫這個this的,因為調(diào)用的時候默認(rèn)就是這個,父類的就是super。這樣一看來,那么python不是要寫很多的self咯。哈哈哈哈。
運行效果圖:
然后看第三個案例:
額,今天是暫時不能運行著第三個了,因為在安裝erric6的時候出現(xiàn)了異常,后面導(dǎo)致我的spyder都打不開了。
遇到的問題:
1.我安裝了兩個python。一個是mysql幫我弄的,2.7版本。一個是anaconda帶的,3.7版本。然后就是cmd里默認(rèn)使用2.7的。所以我百度了一下,發(fā)現(xiàn)把anaconda的環(huán)境變量放在mysql的前面就可以了。這個倒沒啥,一下子就解決了。我的mysql原來是在系統(tǒng)環(huán)境變量里的,anaconda是在用戶環(huán)境變量里的,所以我把mysql的環(huán)境變量放在了用戶環(huán)境變量的最后面就ok了。
在這里學(xué)習(xí)了where python 和python list兩個命令。
2.python install.py的時候,說我需要安裝 QScintilla,然后我就pip install 這個了,接著又提示我:
Could not install packages due to an EnvironmentError: [WinError 5] 拒絕訪問
然后網(wǎng)上說要加上--user ,然后我就加上它,就變成 pip install --user QScintilla 然后pip安裝成功了。 這也沒啥。
3.搞定上面之后,我又把一個沒有的小東西安裝上了。這都沒啥。然后繼續(xù)運行python install.py 出現(xiàn)下面的錯誤:
PyQt5 could not be detected. Error: No module named 'PyQt5.sip' 截圖就是:
此時,我在python里import什么pyqt5啊,sip啊之類的都是可以import的。它這里也明明提示我這些都有了。可是它還是提醒我要安裝pyqt5。然后我pip list,pyqt5的包都是在的,去安裝路徑找也都在,可它就是要我安裝。在spyder里,我直接運行install.py文件,這里pyqt5啥的都說找到了,可是它卻說我QScintilla沒安裝,可是我明明安裝了啊,在cmd里都有了。然后一安裝還出問題了。 我覺得可能是系統(tǒng)有點問題,然后重啟。重啟之后發(fā)現(xiàn),spyder打不開了,anaconda里什么navigate啊之類的也打不開了。現(xiàn)在是代碼都不用寫了。改天再找個ide來寫吧。
今天就算是學(xué)習(xí)了pyqt5的基礎(chǔ)吧,看代碼基本都能看懂了,沒啥大問題。可是工具卻沒用上。額,就到這里了。
歡迎交流討論。
總結(jié)
以上是生活随笔為你收集整理的学pyqt5之前需要学python吗_快速学习pyqt5(1)--入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2023凯度百强榜单中14家中国品牌上榜
- 下一篇: python期末项目书怎么写_自己写了一