在學完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_())