控件2
本章我們繼續(xù)介紹PyQt5控件。這次的有QPixmap
椎咧,QLineEdit
倦始,QSplitter
驰坊,和QComboBox
谊迄。
圖片
QPixmap
是處理圖片的組件。本例中豆励,我們使用QPixmap
在窗口里顯示一張圖片夺荒。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
歡迎加QQ群`923 414 804`與我一起學(xué)習(xí)
In this example, we dispay an image
on the window.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
from PyQt5.QtWidgets import (QWidget, QHBoxLayout,
QLabel, QApplication)
from PyQt5.QtGui import QPixmap
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
pixmap = QPixmap("redrock.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_())
pixmap = QPixmap("redrock.png")
創(chuàng)建一個(gè)QPixmap
對(duì)象,接收一個(gè)文件作為參數(shù)良蒸。
lbl = QLabel(self)
lbl.setPixmap(pixmap)
把QPixmap
實(shí)例放到QLabel
組件里技扼。
程序展示:
行編輯
QLineEdit
組件提供了編輯文本的功能,自帶了撤銷(xiāo)嫩痰、重做剿吻、剪切、粘貼串纺、拖拽等功能和橙。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows text which
is entered in a QLineEdit
in a QLabel widget.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
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_())
例子中展示了一個(gè)編輯組件和一個(gè)標(biāo)簽,我們?cè)谳斎肟蚶镦I入的文本造垛,會(huì)立即在標(biāo)簽里顯示出來(lái)。
qle = QLineEdit(self)
創(chuàng)建一個(gè)QLineEdit
對(duì)象晰搀。
qle.textChanged[str].connect(self.onChanged)
如果輸入框的值有變化五辽,就調(diào)用onChanged()
方法。
def onChanged(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
在onChanged()
方法內(nèi)部外恕,我們把文本框里的值賦值給了標(biāo)簽組件杆逗,然后調(diào)用adjustSize()
方法讓標(biāo)簽自適應(yīng)文本內(nèi)容。
程序展示:
QSplitter
QSplitter
組件能讓用戶通過(guò)拖拽分割線的方式改變子窗口大小的組件鳞疲。本例中我們展示用兩個(gè)分割線隔開(kāi)的三個(gè)QFrame
組件罪郊。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows
how to use QSplitter widget.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,
QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt
import sys
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_())
三個(gè)窗口和兩個(gè)分割線的布局創(chuàng)建完成了,但是要注意尚洽,有些主題下悔橄,分割線的顯示效果不太好。
topleft = QFrame(self)
topleft.setFrameShape(QFrame.StyledPanel)
為了更清楚的看到分割線,我們使用了設(shè)置好的子窗口樣式癣疟。
splitter1 = QSplitter(Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
創(chuàng)建一個(gè)QSplitter
組件挣柬,并在里面添加了兩個(gè)框架。
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
也可以在分割線里面再進(jìn)行分割睛挚。
程序展示:
下拉選框
QComboBox
組件能讓用戶在多個(gè)選擇項(xiàng)中選擇一個(gè)邪蛔。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows how to use
a QComboBox widget.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
from PyQt5.QtWidgets import (QWidget, QLabel,
QComboBox, QApplication)
import sys
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_())
本例包含了一個(gè)QComboBox
和一個(gè)QLabel
。下拉選擇框有五個(gè)選項(xiàng)扎狱,都是Linux的發(fā)行版名稱侧到,標(biāo)簽內(nèi)容為選定的發(fā)行版名稱。
combo = QComboBox(self)
combo.addItem("Ubuntu")
combo.addItem("Mandriva")
combo.addItem("Fedora")
combo.addItem("Arch")
combo.addItem("Gentoo")
創(chuàng)建一個(gè)QComboBox
組件和五個(gè)選項(xiàng)淤击。
combo.activated[str].connect(self.onActivated)
在選中的條目上調(diào)用onActivated()
方法匠抗。
def onActivated(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
在方法內(nèi)部,設(shè)置標(biāo)簽內(nèi)容為選定的字符串遭贸,然后設(shè)置自適應(yīng)文本大小戈咳。
程序展示: