I want to add an icon to my QTableWidget. However, the icon being added is pretty small, so I try to find a way to resize the icon
I have tried using setSizeHint(), but it didn't work. So I thought of creating a pixmap and set the pixmap in QLabel, but I couldn't figure out to convert the QLabel into QTabelWidgetItem.
this is the code in two different approaches
##this is when I try to use setSizeHint()
class test_UI(Ui_MainWindow,QtWidgets.QMainWindow)
    def set_icon(self):
        icon_item=QtWidgets.QTableWidgetItem()
        icon_item.setSizeHint(QtCore.QSize(100,100))
        icon_item.setIcon(QtGui.QIcon("Kevin_test.png"))
        self.tableWidget.setItem(0,1,icon_item)
##this is when I try to use pixmap to put it inside the table
class test_UI(Ui.MainWindow,QtWidgets.QMainWindow)
    def set_icon(self):
        icon_item=QtWidgets.QTableWidgetItem(self.label)
        icon_item.setFlags(QtCore.Qt.ItemIsEditable)
        self.tableWidget.setItem(0,1,icon_item)
    def build_icon(self):
        self.icon = QtGui.QIcon("Kevin_test.png")
        self.label=QtWidgets.QLabel('pic',self)
        self.label.setFixedSize(300,300)
    pixmap1=self.icon.pixmap(100,100,QtGui.QIcon.Active,QtGui.QIcon.On)
        self.label.setPixmap(pixmap1)
For the first approach, I expect the size of the icon to change but it did not.
For the second approach, my program crash because there is no overload call to make QTableWidgetItem with a QLabel.
There are at least the following methods:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Delegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.decorationSize = index.data(QtCore.Qt.SizeHintRole)
def main(args):
    app = QtWidgets.QApplication(args)
    # sol1
    widget_1 = QtWidgets.QTableWidget(1, 1)
    it1 = QtWidgets.QTableWidgetItem()
    widget_1.setItem(0, 0, it1)
    it1.setIcon(QtGui.QIcon("so-logo.png"))
    it1.setSizeHint(QtCore.QSize(100, 100))
    widget_1.setIconSize(QtCore.QSize(100, 100))
    # sol2
    widget_2 = QtWidgets.QTableWidget(1, 1)
    it2 = QtWidgets.QTableWidgetItem()
    widget_2.setItem(0, 0, it2)
    label = QtWidgets.QLabel()
    pixmap = QtGui.QPixmap("so-logo.png")
    """ scaled
    pixmap = pixmap.scaled(
        QtCore.QSize(400, 400),
        QtCore.Qt.KeepAspectRatio,
        QtCore.Qt.SmoothTransformation,
    )"""
    size = pixmap.size()
    label.setPixmap(pixmap)
    it2.setSizeHint(size)
    label.setFixedSize(size)
    widget_2.setCellWidget(0, 0, label)
    # sol3
    widget_3 = QtWidgets.QTableWidget(1, 1)
    it3 = QtWidgets.QTableWidgetItem()
    widget_3.setItem(0, 0, it3)
    it3.setIcon(QtGui.QIcon("so-logo.png"))
    it3.setSizeHint(QtCore.QSize(100, 100))
    delegate = Delegate(widget_3)
    widget_3.setItemDelegate(delegate)
    w = QtWidgets.QWidget()
    lay = QtWidgets.QVBoxLayout(w)
    lay.addWidget(widget_1)
    lay.addWidget(widget_2)
    lay.addWidget(widget_3)
    w.show()
    ret = app.exec_()
    return ret
if __name__ == "__main__":
    sys.exit(main(sys.argv))
Explanation:
By default the icon size is taken based on the iconSize property.
The QLabel can be added using the setCellWidget() method.
You can use a delegate to set the icon size.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With