pyqt5之簡單視窗的建立

faithyiyo發表於2018-10-20
   在學完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_())

 




相關文章