我們先看一段qt Python代碼
from PyQt5.QtWidgets import QApplication, QLabel app = QApplication([]) label = QLabel('Hello World!') label.show() app.exec_()
導入相關的QT相關的庫。
接着是通過創建了一個QApplication:
app = QApplication([])
這是必須要創建的一個對象。每個GUI程序都必須有且只有一個QApplication的實例。如果沒有這個實例的話,我們寫的QT是沒法執行的,所以我們寫QT代碼的時候一定不要忘了創建這個對象。 創建這個對象時需要傳遞一個list參數,因為我們的GUI不需要什么參數,所以直接傳遞了一個[]。
在創建了app之后,我們又創建了一個Label(標簽):
label = QLabel('Hello World!')
傳遞的參數就是標簽顯示的內容,然后通過調用show()方法讓它在屏幕上顯示。
最后的一行代碼是告訴qt一直運行下去,直到有人關閉它。
完成上述工作之后,執行代碼,我們的一個小小窗口就會顯示在屏幕上:
QVBoxLayout example Widgets 我們在Qt程序中看到的每個東西都可以稱之為一個widget:按鈕,標簽,窗口,對話框,程序的進度條等等。與HTML元素類似,widget一般也都是嵌入式的。舉個例子,一個窗口包含了一個按鈕,同時也可能包含了一個標簽。
下面的截圖展示了QT中常用的widget。
Screenshot of common Qt widgets using the Fusion style 從上到下,從左到右,這些widget依次是:
QLabel
QComboBox
QCheckBox
QRadioButton
QPushButton
QTableWidget
QLineEdit
QSlider
QProgressBar
Layouts
正如上面的截圖所示,我們的GUI中可能包含了多個widgets。在這種情況下,我們需要告訴QT如何安放這些widgets。例如。我們可以使用QVBoxLayout垂直堆放widget:
QVBoxLayout example 這個截圖的代碼如下:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout app = QApplication([]) window = QWidget() layout = QVBoxLayout() layout.addWidget(QPushButton('Top')) layout.addWidget(QPushButton('Bottom')) window.setLayout(layout) window.show() app.exec_()
一如既往,我們還是先創建了一個QApplication。接着我們創建了一個window。我們使用的是最基本的QWdiget,因為它只是一個容器,用來放置widget,我們並不需要它有什么特殊的功能。然后,我們就創建了一個layout,還創建了兩個QPushButton放在里面。最后,我們告訴了window,我們需要使用這個layout。然后就跟我們的第一個GUI一樣,調用show()和exec_()。
當然還有很多其他的layout,例如QHBoxLayOut等等。更多的風格,可以在qt的網站上查閱
自定義風格 QT一個比較強大的地方就是它支持自定義的用戶風格。
風格設置 比較直接的設置方式就是在我們的程序中直接指定全局的風格。我們再看看之前的截圖:
Screenshot of common Qt widgets using the Fusion style 上面的這個窗口風格稱之為Flusion,我們也可以把他替換成Windows風格:
Screenshot of common Qt widgets using the Windows style 通過qpp.setStyle(...)方法,我們就可以設置自己的風格了。
from PyQt5.QtWidgets import * app = QApplication([]) app.setStyle('Fusion') ...
具體支持什么樣的風格依賴於我們使用的操作系統,但是一般都支持以下的風格:'Fusion', 'Windows', 'WindowsVista'(僅Windows支持) and 'Macintosh' (僅Mac支持)
自定義顏色 如果我們喜歡一種風格,但是我們想改變一些顏色。那么我們就可以使用QPalette來實現我們的功能。例如:
from PyQt5.QtCore import Qt from PyQt5.QtGui import QPalette from PyQt5.QtWidgets import QApplication, QPushButton app = QApplication([]) app.setStyle('Fusion') palette = QPalette() palette.setColor(QPalette.ButtonText, Qt.red) app.setPalette(palette) button = QPushButton('Hello World') button.show() app.exec_()
除了上述的功能之外,我們還可以通過面板風格來改變我們程序的外觀。這就是QT類似於CSS的特性。我們可以通過以下的方法我們的面板添加一些空間:
from PyQt5.QtWidgets import QApplication, QPushButton app = QApplication([]) app.setStyleSheet("QPushButton { margin: 10ex; }") button = QPushButton('Hello World') button.show() app.exec_() Qt window with a button surrounded by extra space
更多關於面板風格的信息,可以查看qt官網。
Signals / slots QT 通過Signals(信號)機制來讓我們對一些事件做響應,例如我們點擊了一個按鈕。下面的這個例子就是當我們點擊按鈕時,會彈出對話框。
from PyQt5.QtWidgets import * app = QApplication([]) button = QPushButton('Click') def on_button_clicked(): alert = QMessageBox() alert.setText('You clicked the button!') alert.exec_() button.clicked.connect(on_button_clicked) button.show() app.exec_() PyQt QMessageBox saying that a button was clicked
button.clicked這就是個signal(信號),.connect(...)就是我們指定的與這個signal關聯的slot(槽)。上面這是一個簡單的響應函數,當我們點擊這個按鈕的時候,這個動作(函數)就會觸發。
Signals在QT中是無處不在的,用戶也可以定義自己的signal。
編譯屬於自己的APP
更多詳情請瀏覽