📜  PyQt5 QCommandLinkButton – 图标改变信号(1)

📅  最后修改于: 2023-12-03 15:33:52.864000             🧑  作者: Mango

PyQt5 QCommandLinkButton – 图标改变信号

在PyQt5中,QCommandLinkButton是一个按钮控件,它具有不同于其他类型的按钮的特殊属性,如图标和描述性文本。在这个教程中,我们将看到如何使用QCommandLinkButton中的图标改变信号。

准备工作

请确保已经安装了PyQt5,如果没有请按照以下步骤安装:

pip install PyQt5
实现

首先,我们需要导入以下模块:

from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QCommandLinkButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QObject, pyqtSignal

然后,我们将创建一个继承自QObject的类,以触发图标改变信号:

class IconChanger(QObject):
    icon_changed = pyqtSignal(QIcon)

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

    def change_icon(self, icon):
        self.icon_changed.emit(icon)

接下来,我们将创建一个QWidget并将其放置在QGridLayout中。然后,我们将创建一个QCommandLinkButton并将其添加到QWidget中:

class App(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        grid = QGridLayout()
        self.setLayout(grid)

        self.cmdlink = QCommandLinkButton('Click me!', 'This is a command link button.')
        grid.addWidget(self.cmdlink, 0, 0)

        self.show()

最后,我们将实例化IconChanger并连接其图标更改信号到命令链接按钮的set_icon函数上:

        self.icon_changer = IconChanger()
        self.icon_changer.icon_changed.connect(self.cmdlink.setIcon)

我们还将创建一个按钮,以便在单击该按钮时更改图标并触发图标更改信号:

        icon_btn = QCommandLinkButton('Change icon', 'Click to change the icon.')
        icon_btn.clicked.connect(lambda: self.icon_changer.change_icon(QIcon('icon.png')))
        grid.addWidget(icon_btn, 1, 0)

当单击“Change icon”按钮时,IconChanger将更改其拥有的图标,并触发图标更改信号。然后,图标更改信号将触发QCommandLinkButton的set_icon函数,并使其更改其图标。

完整代码如下:

from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QCommandLinkButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QObject, pyqtSignal


class IconChanger(QObject):
    icon_changed = pyqtSignal(QIcon)

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

    def change_icon(self, icon):
        self.icon_changed.emit(icon)


class App(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        grid = QGridLayout()
        self.setLayout(grid)

        self.cmdlink = QCommandLinkButton('Click me!', 'This is a command link button.')
        grid.addWidget(self.cmdlink, 0, 0)

        self.icon_changer = IconChanger()
        self.icon_changer.icon_changed.connect(self.cmdlink.setIcon)

        icon_btn = QCommandLinkButton('Change icon', 'Click to change the icon.')
        icon_btn.clicked.connect(lambda: self.icon_changer.change_icon(QIcon('icon.png')))
        grid.addWidget(icon_btn, 1, 0)

        self.show()


if __name__ == '__main__':
    app = QApplication([])
    ex = App()
    app.exec_()

以上代码运行后,单击“Change Icon”按钮即可更改QCommandLinkButton控件的图标。

其中用到的QIcon的方法有setIcon和setIconSize.