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