【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件

Qt 资源系统(Qt Resource System)是在应用程序里存储二进制文件的一种机制。

文件可以被嵌入到应用程序中,通过 QFile 类,和使用以 :/ 开头的文件名表示的 QIconQPixmap 类来访问。

Qt 资源系统经常用来存储图片、图标、字体等各种第三方资源。这篇教程里我们将学习怎么载入自己的图片来作为按钮图标。

为了方便学习,我们来尝试修改 Qt 例程里的多媒体播放器。它的界面如下,多媒体的控制(播放、暂停、停止等)是用 QPushButton 组件完成的,使用的都是默认图标。

【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件_第1张图片

你可以通过设计图标来让你的程序更有吸引力,但是既然你不想自己设计它们,就是用下面这套图标吧。(这能有吸引力?)

请添加图片描述

你可以通过 Qt 资源系统(Qt Resource System)网站查询更多 rcc 命令、.qrc 文件格式、资源系统等信息。

.qrc 文件

在运行命令之前,要先把资源添加到 .qrc 文件中。下面的例子展示了 icons.qrc 文件中列出的资源。

ui>
DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file>icons/play.pngfile>
    <file>icons/pause.pngfile>
    <file>icons/stop.pngfile>
    <file>icons/previous.pngfile>
    <file>icons/forward.pngfile>
qresource>
RCC>

生成 Python 文件

完成 icons.qrc 文件后,使用 pyside6-rcc 工具来生成包含所有资源二进制信息的 Python 类。运行下面命令:

pyside6-rcc icons.qrc -o rc_icons.py

这里,-o 选项用来指明你的输出文件名,即 rc_icons.py

在你的 Python 主文件里引用生成的类:

import rc_icons

修改例程

因为你是在修改一个现有的例程,你需要修改下面这几行代码:

from PySide6.QtGui import QIcon, QKeySequence
playIcon = self.style().standardIcon(QStyle.SP_MediaPlay)
previousIcon = self.style().standardIcon(QStyle.SP_MediaSkipBackward)
pauseIcon = self.style().standardIcon(QStyle.SP_MediaPause)
nextIcon = self.style().standardIcon(QStyle.SP_MediaSkipForward)
stopIcon = self.style().standardIcon(QStyle.SP_MediaStop)

将它们替换成如下代码:

from PySide6.QtGui import QIcon, QKeySequence, QPixmap
playIcon = QIcon(QPixmap(":/icons/play.png"))
previousIcon = QIcon(QPixmap(":/icons/previous.png"))
pauseIcon = QIcon(QPixmap(":/icons/pause.png"))
nextIcon = QIcon(QPixmap(":/icons/forward.png"))
stopIcon = QIcon(QPixmap(":/icons/stop.png"))

要保证成功替换图标,还需要在以下两处修改代码。

在你的引用后面加入

import rc_icons

然后,将类的构造函数修改成这样:

def __init__(self):
    super(MainWindow, self).__init__()

    self.playlist = QMediaPlaylist()
    self.player = QMediaPlayer()

    toolBar = QToolBar()
    self.addToolBar(toolBar)

    fileMenu = self.menuBar().addMenu("&File")
    openAction = QAction(QIcon.fromTheme("document-open"),
                         "&Open...", self, shortcut=QKeySequence.Open,
                         triggered=self.open)
    fileMenu.addAction(openAction)
    exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit",
                         self, shortcut="Ctrl+Q", triggered=self.close)
    fileMenu.addAction(exitAction)

    playMenu = self.menuBar().addMenu("&Play")
    playIcon = QIcon(QPixmap(":/icons/play.png"))
    self.playAction = toolBar.addAction(playIcon, "Play")
    self.playAction.triggered.connect(self.player.play)
    playMenu.addAction(self.playAction)

    previousIcon = QIcon(QPixmap(":/icons/previous.png"))
    self.previousAction = toolBar.addAction(previousIcon, "Previous")
    self.previousAction.triggered.connect(self.previousClicked)
    playMenu.addAction(self.previousAction)

    pauseIcon = QIcon(QPixmap(":/icons/pause.png"))
    self.pauseAction = toolBar.addAction(pauseIcon, "Pause")
    self.pauseAction.triggered.connect(self.player.pause)
    playMenu.addAction(self.pauseAction)

    nextIcon = QIcon(QPixmap(":/icons/forward.png"))
    self.nextAction = toolBar.addAction(nextIcon, "Next")
    self.nextAction.triggered.connect(self.playlist.next)
    playMenu.addAction(self.nextAction)

    stopIcon = QIcon(QPixmap(":/icons/stop.png"))
    self.stopAction = toolBar.addAction(stopIcon, "Stop")
    self.stopAction.triggered.connect(self.player.stop)
    playMenu.addAction(self.stopAction)

    # many lines were omitted

运行例程

运行结果如下:

【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件_第2张图片


更多关于 Qt for Python 文章,可以查看 PySide6 官方教程 专栏。

你可能感兴趣的:(PySide6,官方教程)