如何将QLabel转换为QTableWidgetItem放入QTableWidg

2024-04-19 22:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在QTableWidget中添加一个图标。但是,被添加的图标非常小,所以我试图找到一种方法来调整图标的大小

我尝试过使用setSizeHint(),但没有成功。所以我想创建一个pixmap,并在QLabel中设置pixmap,但是我不知道如何将QLabel转换成QTabelWidgetItem。你知道吗

这是两种不同方法的代码

##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)

对于第一种方法,我希望图标的大小会改变,但事实并非如此。你知道吗

对于第二种方法,我的程序会崩溃,因为没有重载调用来使用QLabel生成QTableWidgetItem。你知道吗


Tags: to方法testselfdefitemlabel图标
1条回答
网友
1楼 · 发布于 2024-04-19 22:15:31

至少有以下方法:

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))

说明:

  • 默认情况下,图标大小基于iconSize属性。

  • QLabel可以使用setCellWidget()方法添加。

  • 可以使用代理设置图标大小。

相关问题 更多 >