《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




常用控件

阅读:296362624    分享到

控件是构建应用程序的基本模块,PyQt5 提供各种各样的控件,包括标签、按钮、编辑框、复选框、滑动条、列表框等等。本节课,我们将详细介绍几个常用的控件:QLabel、QPixmap、QLineEdit、QSplitter、QComboBox。

标签 QLabel

QLabel 是我们最常用的控件之一,其功能很强大,我们可以用来显示文本,html超文本,链接,图片和动画等。

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtGui import QPixmap, QMovie

class LableExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 创建4个标签
        self.label1 = QLabel(self)  # 文本标签
        self.label2 = QLabel(self)  # 超文本标签
        self.label3 = QLabel(self)  # 链接标签
        self.label4 = QLabel(self)  # 图片标签
        self.label5 = QLabel(self)  # 动画标签

        self.label1.move(100, 50)
        self.label2.move(100, 100)
        self.label3.move(100, 150)
        self.label4.move(100, 200)
        self.label5.move(300, 200)

        self.label1.setText('这是一个文本标签')
        self.label2.setText('<strong style="color:#ff0000">欢迎来学习python</strong>')
        self.label3.setText('<a href="www.birdpython.com">老鸟python官网</a>')
        self.label3.setOpenExternalLinks(True)  # 点击超链接可以打开网页
        pic = QPixmap("res/img/birdpython.png")  # 确保当前目录下有该图片文件
        self.label4.setPixmap(pic)            # 把图片加入标签
        movie = QMovie("test.gif")  # 确保当前目录下有该动画文件
        self.label5.setMovie(movie)      # 把动画加入标签
        movie.start()               # 播放动画

        self.setGeometry(600, 200, 800, 500)
        self.setWindowTitle('标签')
        self.show()

app = QApplication(sys.argv)
ex = LableExample()
app.exec_()

画布 QPixmap

QPixmap 类用于绘图设备的图像显示,它可以作为一个 QPaintDevice 对象,也可以加载到一个控件中,通常是标签或按钮,用于在标签或按钮上显示图像。QPixmap 可以读取的图像文件类型有 BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM 等。刚刚上个例子我们在标签上显示了图片,这次我们在一个按钮上显示图片。

import sys
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication)
from PyQt5.QtCore import QSize

class PixmapExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        pixmap = QPixmap("birdpython.png")  # 确保当前目录下有该图片
        self.btn = QPushButton(self)
        self.btn.setIcon(QIcon(pixmap))     # 需要用 QIcon 转换一下
        self.btn.setGeometry(100, 200, 100, 50)  # 设置按钮显示位置和大小
        self.btn.setIconSize(QSize(100, 50))     # 设置按钮上的图片大小

        self.setWindowTitle('画布')
        self.setGeometry(600, 200, 800, 500)
        self.show()

app = QApplication(sys.argv)
ex = PixmapExample()
app.exec_()

编辑框 QLineEdit

QLineEdit 叫编辑框也叫文本框,它是用于输入或编辑单行文本的控件,它还有撤销重做、剪切复制和拖拽功能。

import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QApplication)

class LineEditExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.lb = QLabel(self)
        self.le = QLineEdit(self)
        self.lb.move(60, 40)
        self.le.move(60, 100)

        self.le.textChanged[str].connect(self.onChanged)

        self.setGeometry(600, 200, 800, 500)
        self.setWindowTitle('编辑框')
        self.show()

    def onChanged(self, text):
        self.lb.setText(text)
        self.lb.adjustSize()

app = QApplication(sys.argv)
ex = LineEditExample()
app.exec_()

分隔器 QSplitter

通过 QSplitter,用户可以拖动子控件边界来调整子控件的尺寸。在下面的示例中,我们展示了三个由两个 QSplitter 组织的 QFrame 控件。

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,
                             QSplitter, QApplication)

class SplitterExample(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)  # 分割器 1
        splitter1.addWidget(topleft)
        splitter1.addWidget(topright)

        splitter2 = QSplitter(Qt.Vertical)    # 分割器 2
        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        hbox.addWidget(splitter2)
        self.setLayout(hbox)

        self.setGeometry(600, 200, 800, 500)
        self.setWindowTitle('QSplitter')
        self.show()

app = QApplication(sys.argv)
ex = SplitterExample()
app.exec_()

示例中我们创建了三个 QFrame 与两个 QSplitter,注意在某些主题中这些 QSplitter 可能会不可见。另外,QHBoxLayout 是一个布局网格控件,可以对在此网格内的控件进行布局。

组合框 QComboBox

QComboBox 其实就是把一个编辑框和一个列表框组合到了一起,组合框也叫下拉列表框,组合框可以是可编辑的,允许用户修改列表中的每个项目。

import sys
from PyQt5.QtWidgets import (QWidget, QLabel,
                             QComboBox, QApplication)

class ComboBoxExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.lb = QLabel("老鸟python", self)

        self.combo = QComboBox(self)
        self.combo.addItem("python3教程")
        self.combo.addItem("设计模式教程")
        self.combo.addItem("Django教程")
        self.combo.addItem("爬虫教程")
        self.combo.addItem("人工智能教程")
        self.combo.addItem("自动化教程")

        self.combo.move(50, 50)
        self.lb.move(50, 200)

        self.combo.activated[str].connect(self.onActivated)

        self.setGeometry(600, 200, 800, 500)
        self.setWindowTitle('组合框')
        self.show()

    def onActivated(self, text):
        self.lb.setText(text)
        self.lb.adjustSize()

app = QApplication(sys.argv)
ex = ComboBoxExample()
app.exec_()

示例中展示了一个 QComboBox 与一个 QLabel,QComboBox 控件中有 6 个选项,当选中某个选项时会调用 onActivated 方法。另外,我们让 QLabel 控件显示 QComboBox 中选中的某个选项。

本节重要知识点

熟练掌握本节介绍的各种控件。

作业

做一个对话框,把本节课讲的所有控件都显示出来。


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
想换个ID
2020年3月12日 05:04 回复

一看就会,明白易懂,我现在很想做个好用的界面程序了


user_image
白如冰
2020年2月3日 11:17 回复

厉害了,我的哥


user_image
爱吃爆米花
2019年10月24日 15:28 回复

很用心,常用的控件都讲了


user_image
雀投江
2019年2月15日 17:07 回复

非常棒的参考书