QTableWidget中如何让Qicon填满整个QTableWidgetItem或grid
How to make Qicon fill entire QTableWidgetItem or grid in QTableWidget
我做过QTableWidget,问题是如何在QtableWidget中制作一个Qicon来填充整个网格或QTableWidget,甚至拉伸网格的宽度或高度,谢谢。
代码如下:
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_())
您需要使用 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)
我做过QTableWidget,问题是如何在QtableWidget中制作一个Qicon来填充整个网格或QTableWidget,甚至拉伸网格的宽度或高度,谢谢。
代码如下:
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_())
您需要使用 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)