PyQt5: QIcon
Torna all’indice degli appunti
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.
Commenti recenti