图标没有出现在 QTableWidget 中
Icon does not appear in QTableWidget
我正在制作一个可以保存多个项目的剪贴板。我的剪贴板使用 QClipboard
可以存储文本、文件路径和图像。当您复制某些内容时,它会显示在 QTableWidget
中,但图像存在问题。我想以小尺寸显示它们作为 QTableWidgetItem
中的图标,所以我的代码将 QImage
转换为 QPixmap
到 QIcon
并将其放在 QTableWidgetItem
;但是单元格显示为空。
我无法弄清楚问题出在哪里,但也许有人可以发现它。 table 中的放置由“ToTable”函数执行。
class mainUI(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi("MCInterface.ui", self)
self.qcb = QtWidgets.QApplication.clipboard()
self.clipboard = []
self.qcb.dataChanged.connect(self.GetClipboard)
def GetClipboard(self):
spinbox = self.ui.SB_ContainerLen
clen = spinbox.value()
if not self.ui.TB_Pause.isChecked():
if self.qcb.text():
data = self.qcb.text()
elif self.qcb.image():
data = (self.qcb.image())
if data not in self.clipboard and len(self.clipboard) < clen:
if isinstance(data, str) and data.startswith("file:///") and "\n" in data:
data = data.splitlines()
for d in data:
if len(self.clipboard) < clen:
self.clipboard.append(d)
self.ToTable(d)
else:
self.clipboard.append(data)
self.ToTable(data)
print(self.clipboard)
def addRow(self):
row = self.ui.TW_Clipboard.rowCount()
self.ui.TW_Clipboard.insertRow(row)
return row
def ToTable(self, data):
table = self.ui.TW_Clipboard
if isinstance(data, QImage):
row = self.addRow()
pixmap = QPixmap()
pixmap.fromImage(data)
icon = QIcon()
icon.addPixmap(pixmap)
xItem = QtWidgets.QTableWidgetItem()
xItem.setIcon(icon)
yItem = QtWidgets.QTableWidgetItem("Bild")
table.setItem(row, 0, xItem)
table.setItem(row, 1, yItem)
elif isinstance(data, str) and data.startswith("file:///"):
row = self.addRow()
table.setItem(row, 0, QtWidgets.QTableWidgetItem(data[8:]))
table.setItem(row, 1, QtWidgets.QTableWidgetItem("Datei"))
else:
row = self.addRow()
table.setItem(row, 0, QtWidgets.QTableWidgetItem(data))
table.setItem(row, 1, QtWidgets.QTableWidgetItem("Text"))
table.setRowHeight(row, 50)
fromImage()
是一个 static 函数,returns 一个 QPixmap。由于您只执行了该函数而没有引用其结果,因此 pixmap
仍然是您使用 pixmap = QPixmap()
.
创建的 empty 像素图
更改为以下内容:
def ToTable(self, data):
table = self.ui.TW_Clipboard
if isinstance(data, QtGui.QImage):
row = self.addRow()
pixmap = QtGui.QPixmap.fromImage(data)
# ...
请注意,如果您想跟踪复制的路径,您应该使用 mime 数据 urls()
而不是从文本转换它们:复制实际路径是 与复制该路径的字符串不同。
我正在制作一个可以保存多个项目的剪贴板。我的剪贴板使用 QClipboard
可以存储文本、文件路径和图像。当您复制某些内容时,它会显示在 QTableWidget
中,但图像存在问题。我想以小尺寸显示它们作为 QTableWidgetItem
中的图标,所以我的代码将 QImage
转换为 QPixmap
到 QIcon
并将其放在 QTableWidgetItem
;但是单元格显示为空。
我无法弄清楚问题出在哪里,但也许有人可以发现它。 table 中的放置由“ToTable”函数执行。
class mainUI(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = uic.loadUi("MCInterface.ui", self)
self.qcb = QtWidgets.QApplication.clipboard()
self.clipboard = []
self.qcb.dataChanged.connect(self.GetClipboard)
def GetClipboard(self):
spinbox = self.ui.SB_ContainerLen
clen = spinbox.value()
if not self.ui.TB_Pause.isChecked():
if self.qcb.text():
data = self.qcb.text()
elif self.qcb.image():
data = (self.qcb.image())
if data not in self.clipboard and len(self.clipboard) < clen:
if isinstance(data, str) and data.startswith("file:///") and "\n" in data:
data = data.splitlines()
for d in data:
if len(self.clipboard) < clen:
self.clipboard.append(d)
self.ToTable(d)
else:
self.clipboard.append(data)
self.ToTable(data)
print(self.clipboard)
def addRow(self):
row = self.ui.TW_Clipboard.rowCount()
self.ui.TW_Clipboard.insertRow(row)
return row
def ToTable(self, data):
table = self.ui.TW_Clipboard
if isinstance(data, QImage):
row = self.addRow()
pixmap = QPixmap()
pixmap.fromImage(data)
icon = QIcon()
icon.addPixmap(pixmap)
xItem = QtWidgets.QTableWidgetItem()
xItem.setIcon(icon)
yItem = QtWidgets.QTableWidgetItem("Bild")
table.setItem(row, 0, xItem)
table.setItem(row, 1, yItem)
elif isinstance(data, str) and data.startswith("file:///"):
row = self.addRow()
table.setItem(row, 0, QtWidgets.QTableWidgetItem(data[8:]))
table.setItem(row, 1, QtWidgets.QTableWidgetItem("Datei"))
else:
row = self.addRow()
table.setItem(row, 0, QtWidgets.QTableWidgetItem(data))
table.setItem(row, 1, QtWidgets.QTableWidgetItem("Text"))
table.setRowHeight(row, 50)
fromImage()
是一个 static 函数,returns 一个 QPixmap。由于您只执行了该函数而没有引用其结果,因此 pixmap
仍然是您使用 pixmap = QPixmap()
.
创建的 empty 像素图
更改为以下内容:
def ToTable(self, data):
table = self.ui.TW_Clipboard
if isinstance(data, QtGui.QImage):
row = self.addRow()
pixmap = QtGui.QPixmap.fromImage(data)
# ...
请注意,如果您想跟踪复制的路径,您应该使用 mime 数据 urls()
而不是从文本转换它们:复制实际路径是 与复制该路径的字符串不同。