PyQt5的學習
花費了一個下午把PyQt5大概的學習了下。找了一個教程 PyQt5教程 跟着挨着把上面的案例做了一遍,大概知道PyQt5是如何生成窗體,以及控件的。基本上做到如果有需求要實現,查查手冊,搜搜百度能實現的水平。
另外強烈推薦:PyQt5圖形界面編程
PyQt5就是python的GUI庫,用它來做一些桌面軟件,是QT的python版本。具體的簡介就不贅述了。記錄點自己學習的干貨。
使用大概流程
首先當然是安裝PyQt5的類庫
pip3 install PyQt5
PyQt5的使用
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI() #界面繪制交給InitUi方法
def initUI(self):
#設置窗口的位置和大小
self.setGeometry(300, 300, 300, 220)
#設置窗口的標題
self.setWindowTitle('Icon')
#設置窗口的圖標,引用當前目錄下的web.png圖片
self.setWindowIcon(QIcon('web.png'))
#顯示窗口
self.show()
if __name__ == '__main__':
#創建應用程序和對象
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
然后幾乎就可以跑出來一個窗體了。至於窗體上的設置,幾乎看着英語就能知道如何寫。比如
self.setWindowTitle('設置標題')
self.setWindowIcon(QIcon('web.png')) #設置icon圖標
常見的組件
- QCheckBox
- QPushButton
- QSlider
- QProgressBar
- QCalendarWidget
- QPixmap
- QLineEdit
- QSplitter
- QComboBox
以上是這個教程上講到的控件。控件部分個人認為不需要花費時間去研究,如果用到了查查,經常用到了,自然能記得住。沒必要深入研究。
要使用一個組件,直接實例化,然后parent指定為當前的對象。就會出現在當前對象上
button = QButton('按鈕名稱',self)
#然后設置一些組件的特性並且把組件觸發的時間插入插槽就可以了,插槽接下來講解
button.move(200,100)
button.clicked.connect(self.button_click)
信號和插槽 Signal&slot
這個應該算是重點了,因為UI最后還是要接受用戶的點擊、輸入,要有事件產生並且能有處理事件的函數和方法。類似C#中的事件委托一樣。
插槽
要處理一個事件,比如一個按鈕的事件我們用插槽接受事件信號。如下偽代碼
button.clicked.connect(self.button_click)
#插槽
def button_click(self):
#被點擊執行的代碼
#信號的發送者
sender = self.sender()
信號與發出信號
#我們需要定義一個發送信號的對象
class Communicate(QObject):
closeApp = pyqtSignal()
#在發送信號的窗體類代碼
class Example(QMainWindow):
def __init__(self):
self.c = Communicate()
def mousePressEvent(self, event):
#出發信號的發送
self.c.closeApp.emit()
另外還有幾個問題需要進一步思考:
- 發送如何寫在類中,比如自定義一個控件,然后這個類出發事件,可以給別的類調用實例化的對象的時候處理?
- 信號槽如何發送帶參數的消息。
對話框
- QInputDialog
- QColorDialog
- QFontDialog
- QFileDialog
- QMessageBox
個人認為對話框沒有太多需要講解的。用到了查查,知道如何彈出,如何獲得彈出后操作的結果就可以了。
關於窗體如何彈出。每一個集成了QWidget的窗體,都會有一個show方法,在需要彈出的地方調用他們就可以彈出了。
模態窗體
方法 | 說明 |
---|---|
setWindowModality() | Qt.NonModal:非模態,可以和程序的其他窗口進行交互 |
Qt.WindowModal:窗口模態,程序在未處理玩當前對話框時,將阻止和對話框的父窗口進行交互 | |
Qt.ApplicationModal:應用程序模態,阻止和任何其他窗口進行交互 |
繪圖
如果要自定義控件,少不了需要做繪圖。
python的控件會自動調用paintEvent事件。所以只需要調用paitEvent事件,就可以做到繪圖。
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
self.drawText(event, qp)
qp.end()
而paintEvent會在需要控件重繪的時候,進行調用,如果要強制重匯。需要在這個方法中調用:
.update()