【第八節】PyQt5控制元件(II)
在這裡我們將繼續介紹PyQt5控制元件。我們將介紹QPixmap、QLineEdit QSplitter,QComboBox。
QPixmap
QPixmap是用於處理影象的控制元件。是優化的顯示影象在螢幕上。在我們的程式碼示例中,我們將使用QPixmap視窗顯示一個影象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# -*- coding: utf-8 -*- """ PyQt5 tutorial In this example, we dispay an image on the window. author: py40.com last edited: 2017年3月 """ import sys from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QLabel, QApplication) from PyQt5.QtGui import QPixmap class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout(self) pixmap = QPixmap("icon.png") lbl = QLabel(self) lbl.setPixmap(pixmap) hbox.addWidget(lbl) self.setLayout(hbox) self.move(300, 200) self.setWindowTitle('Red Rock') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
在視窗上顯示一個圖片
1 |
pixmap = QPixmap("icon.png") |
建立一個QPixmap 物件,它將傳入的檔名作為引數。
1 2 |
lbl = QLabel(self) lbl.setPixmap(pixmap) |
我們將這個pixmap放到QLabel控制元件中。
文字框 QLineEdit
QLineEdit是用於輸入或編輯單行文字的控制元件。它還有撤銷重做、剪下複製和拖拽功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# -*- coding: utf-8 -*- """ PyQt5 tutorial This example shows text which is entered in a QLineEdit in a QLabel widget. author: py40.com last edited: 2017年3月 """ import sys from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl = QLabel(self) qle = QLineEdit(self) qle.move(60, 100) self.lbl.move(60, 40) qle.textChanged[str].connect(self.onChanged) self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QLineEdit') self.show() def onChanged(self, text): self.lbl.setText(text) self.lbl.adjustSize() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
示例中展示了一個QLineEdit與一個QLabel。我們在QLineEdit中輸入的文字會實時顯示在QLabel控制元件中。
1 |
qle = QLineEdit(self) |
建立QLineEdit
1 |
qle.textChanged[str].connect(self.onChanged) |
文字框的內容發生改變的時候,會呼叫onChanged方法
1 2 3 4 |
def onChanged(self, text): self.lbl.setText(text) self.lbl.adjustSize() |
在onChanged()方法中我們將QLabel控制元件的文字設定為輸入的內容。通過呼叫adjustSize()方法將QLabel控制元件的尺寸調整為文字的長度。
QSplitter
通過QSplitter,使用者可以拖動子控制元件邊界來調整子控制元件的尺寸。在下面的示例中,我們展示了三個由兩個QSplitter組織的QFrame控制元件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# -*- coding: utf-8 -*- """ PyQt5 tutorial This example shows how to use QSplitter widget. author: py40.com last edited: 2017年3月 """ import sys from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame, QSplitter, QStyleFactory, QApplication) from PyQt5.QtCore import Qt class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout(self) topleft = QFrame(self) topleft.setFrameShape(QFrame.StyledPanel) topright = QFrame(self) topright.setFrameShape(QFrame.StyledPanel) bottom = QFrame(self) bottom.setFrameShape(QFrame.StyledPanel) splitter1 = QSplitter(Qt.Horizontal) splitter1.addWidget(topleft) splitter1.addWidget(topright) splitter2 = QSplitter(Qt.Vertical) splitter2.addWidget(splitter1) splitter2.addWidget(bottom) hbox.addWidget(splitter2) self.setLayout(hbox) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QSplitter') self.show() def onChanged(self, text): self.lbl.setText(text) self.lbl.adjustSize() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
示例中我們建立了三個QFrame與兩個QSplitter。注意在某些主題中這些QSplitter可能會不可見。
1 2 |
topleft = QFrame(self) topleft.setFrameShape(QFrame.StyledPanel) |
我們使用一個風格框架為了看到QFrame小部件之間的界限。
1 2 3 |
splitter1 = QSplitter(Qt.Horizontal) splitter1.addWidget(topleft) splitter1.addWidget(topright) |
我們建立一個QSplitter小部件和新增兩個幀。
1 2 |
splitter2 = QSplitter(Qt.Vertical) splitter2.addWidget(splitter1) |
我們也可以將QSplitter新增到另一個QSplitter控制元件中。
下拉列表 QComboBox
QComboBox是允許使用者從下拉列表中進行選擇的控制元件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# -*- coding: utf-8 -*- """ PyQt5 tutorial This example shows how to use a QComboBox widget. author: py40.com last edited: 2017年3月 """ import sys from PyQt5.QtWidgets import (QWidget, QLabel, QComboBox, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.lbl = QLabel("Ubuntu", self) combo = QComboBox(self) combo.addItem("Ubuntu") combo.addItem("Mandriva") combo.addItem("Fedora") combo.addItem("Arch") combo.addItem("Gentoo") combo.move(50, 50) self.lbl.move(50, 150) combo.activated[str].connect(self.onActivated) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QComboBox') self.show() def onActivated(self, text): self.lbl.setText(text) self.lbl.adjustSize() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
示例中展示了一個QComboBox與一個QLabel,QComboBox控制元件中有5個選項(Linux系統的幾個發行版名稱)。QLabel控制元件會顯示QComboBox中選中的某個選項。
1 2 3 4 5 6 |
combo = QComboBox(self) combo.addItem("Ubuntu") combo.addItem("Mandriva") combo.addItem("Fedora") combo.addItem("Arch") combo.addItem("Gentoo") |
建立了一個有五個選項的QComboBox
1 |
combo.activated[str].connect(self.onActivated) |
當選中某個條目時會呼叫onActivated()方法。
1 2 3 4 |
def onActivated(self, text): self.lbl.setText(text) self.lbl.adjustSize() |
在方法中我們將QLabel控制元件的內容設定為選中的條目,然後調整它的尺寸。