vnpy源碼閱讀學習(2)PyQt5的學習

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圖標

常見的組件

  1. QCheckBox
  2. QPushButton
  3. QSlider
  4. QProgressBar
  5. QCalendarWidget
  6. QPixmap
  7. QLineEdit
  8. QSplitter
  9. 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()

另外還有幾個問題需要進一步思考:

  1. 發送如何寫在類中,比如自定義一個控件,然後這個類出發事件,可以給別的類調用實例化的對象的時候處理?
  2. 信號槽如何發送帶參數的消息。

對話框

  1. QInputDialog
  2. QColorDialog
  3. QFontDialog
  4. QFileDialog
  5. 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()

自定義控件

通過可視化的方法設計GUI

參考

PyQt5-簡明中文教程

Qt5文檔
PyQt5圖形界面編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章