在學完tkinter後,發現tkinter在佈局方面特別的不方便(Tkinter資料:http://effbot.org/tkinterbook/tkinter-index.htm),
因此學習pyqt5,之前用tkinter寫了一個簡單的python入門教程的exe,基本都是程式導向的程式設計思想,
很少將函數語言程式設計思想和麵向物件的思想,在學習pyqt5的過程中,希望培養物件導向程式設計的思想!
關於pyqt5的學習主要參考下面的教程,部分知識及程式碼相當於是對PyQt5 tutorial的總結!
http://zetcode.com/gui/pyqt5/introduction/
一.pyqt5各個模組功能
QtCore 模組包含了非GUI的功能設計。
這個模組被用來實現時間,檔案和目錄,不同資料型別,流,URL,mime型別,執行緒和程式。
QtGui 模組包含的類用於視窗化的系統結構,事件處理,2D繪圖,基本圖形,字型和文字。
QtWidgets 模組包含的類提供了一套UI元素來建立經典桌面風格使用者介面。
QtMultimedia 模組包含的類用於處理多媒體內容和連結攝像頭和無線電功能的API。
QtBluetooth 模組包含的類用於掃描藍芽裝置,並且和他們建立連線互動。
QtNetwork 模組包含的類用於網路程式設計,這些類使TCP/IP和UDP客戶端/服務端程式設計更加容易和輕便。
QtPositioning 模組包含的類用於多種可獲得資源的位置限定,包含衛星定位,Wi-Fi,或一個文字檔案。
Enginio 模組用於解決客戶端訪問Qt雲服務託管。
QtWebSockets 模組包含的類用於解決WebSocket通訊協議。
QtWebKit 包含的關於瀏覽器的類用於解決基於WebKit2的支援庫。
QtWebKitWidgets 模組包含的關於WebKit1的類基本解決瀏覽器使用基於QtWidgets應用問題。
QtXml 模組包含的類用於解析XML檔案。這個模組提供SAX和DOM API解決方法。
QtSvg 模組提供類用於顯示SVG檔案內容。Scalable Vector Graphics (SVG) 是一種語言,
用XML來描述二維圖形和圖形應用程式。
QtSql模組提供類驅動資料庫工作。
QtTest 模組包含了方法提供PyQt5應用的單元測試
二. PyQT4 and Pyqt5 fifferences
不相容pyqt4, 模組被改寫,新模組的引入
三.簡單視窗的建立
沒有父類的元件是頂級視窗。
見例子
四.關閉視窗
QPushButton(string text, QWidget parent = None)
text引數是將顯示在按鈕中的內容。parent引數是一個用來放置我們按鈕的元件
qbtn.clicked.connect(QCoreApplication.instance().quit)
在PyQt5中,事件處理系統由訊號&槽機制建立。如果我們點選了按鈕,訊號clicked被髮送。
槽可以是Qt內建的槽或Python 的一個方法呼叫。QCoreApplication類包含了主事件迴圈;
它處理和轉發所有事件。instance()方法給我們返回一個例項化物件。
注意QCoreAppli類由QApplication建立。點選訊號連線到quit()方法,將結束應用。
事件通訊在兩個物件之間進行:傳送者和接受者。傳送者是按鈕,接受者是應用物件
1 import sys 2 from PyQt5.QtWidgets import (QWidget, QToolTip, 3 QPushButton, QApplication) 4 from PyQt5.QtGui import QIcon 5 from PyQt5.QtGui import QFont 6 from PyQt5.QtCore import QCoreApplication 7 8 # ----------------------------------------------# 9 # 簡單pyqt5 10 # ----------------------------------------------# 11 12 13 def create_ui(): 14 app = QApplication(sys.argv) # 所有pyqt5必須建立一個QApplication物件 15 16 w = QWidget() # 沒有父類的widget將被作為視窗使用 17 w.resize(250, 150) # 大小 18 w.move(300, 300) # 起始座標 19 w.setWindowTitle(`GUI`) # 標題 20 w.show() 21 # 應用進入主迴圈。在這個地方,事件處理開始執行。 22 # 主迴圈用於接收來自視窗觸發的事件,並且轉發他們到widget應用上處理。 23 # 如果我們呼叫exit()方法或主widget元件被銷燬,主迴圈將退出。 24 # sys.exit()方法確保一個不留垃圾的退出。 25 # 系統環境將會被通知應用是怎樣被結束的 26 sys.exit(app.exec_()) 27 28 29 # ----------------------------------------------# 30 # pyqt5修改顯示圖示 31 # ----------------------------------------------# 32 class Example1(QWidget): 33 34 def __init__(self): 35 super().__init__() 36 # super()方法返回了父類物件並呼叫了父類的構造方法 37 self.__init_ui() 38 39 def __init_ui(self): 40 41 self.setGeometry(300, 300, 300, 220) 42 self.setWindowTitle(`GUI`) 43 self.setWindowIcon(QIcon(`f.ico`)) 44 45 self.show() 46 47 # ----------------------------------------------# 48 # pyqt5顯示提示框 49 # ----------------------------------------------# 50 51 52 class Example2(QWidget): 53 54 def __init__(self): 55 super().__init__() 56 self.__init_ui() 57 58 def __init_ui(self): 59 60 # 設定提示框的字型和大小 61 QToolTip.setFont(QFont(`SansSerif`, 20)) 62 63 # 用於顯示元件的提示框 64 self.setToolTip(`This is a <b>QWidget</b> widget`) 65 66 # 建立一個按鍵 67 btn = QPushButton(`Button`, self) 68 69 # 為按鍵建立提示框 70 btn.setToolTip(`This is a <b>QPushButton</b> widget`) 71 72 # setHint()方法給了按鈕一個推薦的大小 73 btn.resize(btn.sizeHint()) 74 btn.move(50, 50) 75 76 self.setGeometry(300, 300, 300, 200) 77 self.setWindowTitle(`Tooltips`) 78 self.show() 79 80 # ----------------------------------------------# 81 # 關閉視窗 82 # ----------------------------------------------# 83 84 85 class Example3(QWidget): 86 87 def __init__(self): 88 super().__init__() 89 90 self.__init_ui() 91 92 def __init_ui(self): 93 btn = QPushButton(`Quit`, self) 94 btn.clicked.connect(QCoreApplication.instance().quit) 95 btn.resize(btn.sizeHint()) 96 btn.move(50, 50) 97 98 self.setGeometry(300, 300, 250, 150) 99 self.setWindowTitle(`Quit button`) 100 self.show() 101 102 # 測試簡單的建立ui 103 104 105 # create_ui() 106 107 app = QApplication(sys.argv) 108 109 # pyqt5修改顯示圖示 110 # ex = Example1() 111 112 # pyqt5顯示提示框 113 # ex1 = Example2() 114 115 # pyqt5退出命令,理解訊號與槽 116 ex2 = Example3() 117 sys.exit(app.exec_())