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