Home > PyQt5, python > PyQt5: QIcon

PyQt5: QIcon

12 Dicembre 2019

Torna all’indice degli appunti

QIcon

L’oggetto icona rappresenta un’immagine tipicamente utilizzata per rappresentare un’azione. Le troviamo spesso su widget come bottoni, menu, liste.
Il costruttore è QIcon e senza ulteriori argomenti, crea un oggetto QIcon vuoto:

>>> from PyQt5.QtGui import QIcon
>>> icon = QIcon()

Per aggiungere il file dell’icona all’oggetto, si utilizza il metodo addFile(filename, qsize, mode, state), dove:
filename: è il percorso del file dell’icona che vogliamo rappresentare;
qsize: è un oggetto QSize che rappresenta le dimensioni dell’icona.
mode: è una costante (enum) della classe QIcon, che può assumere i seguenti valori:

Costante

valore

Descrizione
Normal 0 Visualizza il pixmap quando l’utente non sta interagendo con l’icona; la funzionalità rappresentata dall’icona è disponibile
Disabled 1 Visualizza il pixmap quando la funzionalità rappresentata dall’icona non è disponibile
Active 2 Visualizza il pixmap quando la funzionalità è disponibile e l’utente sta interagendo con l’icona (passandoci sopra o cliccando)
Selected 3 Visualizza il pixmap quando l’elemento rappresentato dall’icona viene selezionato

state: è una costante (enum) della classe QIcon, che può assumere i seguenti valori:

Costante

valore

Descrizione
off 1 visualizza il pixmap quando lo stato del widget è OFF
on 0 visualizza il pixmap quando lo stato del widget è ON

Quindi per aggiungere il file all’oggetto QIcon:

>>> from PyQt5.QtCore import QSize
>>> icon.addFile("Qt.png", QSize(128, 128), QIcon.Normal, QIcon.On)

Con il metodo isNull possiamo sapere se un oggetto QIcon è vuoto o meno:

>>> icon2 = QIcon()
>>> icon.isNull()
False
>>> icon2.isNull()
True

Un codice di esempio per vedere le diverse costanti in azione può essere:

from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QWidget, QApplication, QBoxLayout, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize

import sys


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle("QIcon Example")
        self.central_widget = FormWidget(parent=self)
        self.setCentralWidget(self.central_widget)
        self.resize(200, 150)


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.setLayout(layout)
        icon = QIcon()
        icon.addFile(icon.addFile("Qt.png", QSize(128, 128),
                                  QIcon.Normal, QIcon.On))
        button = QPushButton("Qt")
        button.setIcon(icon)
        layout.addWidget(button)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow(parent=None)
    main_window.show()
    sys.exit(app.exec_())

Le dimensioni dell’icona all’interno del widget che la ospita, possono essere modificate con il metodo setIconSize(QSize) dove QSize è
appunto un oggetto QSize, esempio:

>>> button = QPushButton("Qt")
>>> button.setIcon(icon)
>>> button.setIconSize(QSize(128, 128))

SWAP

Il metodo swap(other) permette di cambiare l’icona attualmente in uso, con quella indicata dal parametro other.
Vediamo un’esempio con una due bottoni che si scambiano l’icona al click:

from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QWidget, QApplication, QBoxLayout, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize

import sys


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle("QIcon Example")
        self.central_widget = FormWidget(parent=self)
        self.setCentralWidget(self.central_widget)
        self.resize(200, 150)


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.setLayout(layout)
        size = QSize(128, 128)
        self.icon_1 = QIcon()  # GREEN ICON
        self.icon_1.addFile("Qt.png", size, QIcon.Normal, QIcon.Off)
        self.icon_2 = QIcon()  # RED ICON
        self.icon_2.addFile("Qtred.png", size, QIcon.Normal, QIcon.Off)
        self.button1 = QPushButton("Button 1")
        self.button2 = QPushButton("Button 2")
        self.button1.setIcon(self.icon_2)  # Inizialmente RED ICON
        self.button1.setIconSize(QSize(128, 128))
        self.button2.setIcon(self.icon_1)  # Inizialmente GREEN ICON
        self.button2.setIconSize(QSize(128, 128))
        layout.addWidget(self.button1)
        layout.addWidget(self.button2)

        self.button1.clicked.connect(self.on_button)
        self.button2.clicked.connect(self.on_button)

    def on_button(self):
        self.icon_2.swap(self.icon_1)
        self.button1.setIcon(self.icon_2)
        self.button2.setIcon(self.icon_1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow(parent=None)
    main_window.show()
    sys.exit(app.exec_())

il metodo swap inverte le icone di icon_1 e icon_2 e ad ogni click, le torna ad invertire; i bottoni di conseguenza avranno l’icona aggiornata ad
ogni click.

Torna all’indice degli appunti

Categorie:PyQt5, python Tag: ,
I commenti sono chiusi.