如何使Qicon在QTableWidget中填充整个QTableWidgetItem或网格

2024-10-01 15:31:27 发布

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

我在QTableWidget上工作过,问题是如何制作一个Qicon来填充整个网格或QTableWidget中的QTableWidget,甚至可以拉伸网格的宽度或高度,谢谢。 running resultpicture 1.pngpicture 2.pngpicture 3.png

代码如下:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon

class Table(QWidget):
    def __init__(self):
        super(Table, self).__init__()
        self.initUI()
    def initUI(self):
        self.setWindowTitle("QTableWidget Example")
        self.resize(400,300)
        self.layout=QHBoxLayout()
        self.TableWidget=QTableWidget(2,3)

        self.TableWidget.setHorizontalHeaderLabels(['Nmae','Sex','Weight(kG)'])

        self.newItem=QLineEdit('Jack')        
        self.TableWidget.setCellWidget(0,0,self.newItem)        

        self.newItem=QLineEdit('Male')        
        self.TableWidget.setCellWidget(0,1,self.newItem)        
        self.newItem=QLineEdit('160')        
        self.TableWidget.setCellWidget(0,2,self.newItem)     

        self.newItem=QTableWidgetItem(QIcon("./icon/1.png"),'')
        self.TableWidget.setItem(1,0,self.newItem) 

        self.newItem=QTableWidgetItem(QIcon("./icon/2.png"),'')
        self.TableWidget.setItem(1,1,self.newItem)

        self.newItem=QTableWidgetItem(QIcon("./icon/2.png"),'')
        self.TableWidget.setItem(1,2,self.newItem)
   

        self.layout.addWidget(self.TableWidget)

        self.setLayout(self.layout)

if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=Table()
    win.show()
    sys.exit(app.exec_())

Tags: importselfpngsystableiconlayoutsetitem
1条回答
网友
1楼 · 发布于 2024-10-01 15:31:27

您需要使用一个item delegate,然后检查索引是否具有装饰角色的有效数据,在这种情况下,绘制它而不是使用默认的绘制功能

class ImageDelegate(QStyledItemDelegate):
    def paint(self, painter, opt, index):
        decoration = index.data(Qt.DecorationRole)
        if decoration is not None:
            if isinstance(decoration, QIcon):
                decoration = decoration.pixmap(opt.rect.size())
            # decoration role can also contain a QColor, we only want a pixmap
            if isinstance(decoration, QPixmap):
                painter.drawPixmap(opt.rect, decoration)
                return
        super().paint(painter, opt, index)


class Table(QWidget):
    # ...
    def initUI(self):
        # ...
        self.delegate = ImageDelegate(self.TableWidget)
        self.TableWidget.setItemDelegate(self.delegate)

相关问题 更多 >

    热门问题