У меня есть Qtablewidget, и я добавляю виджет в ячейку Qtablewidget с помощью setcellwidget. Теперь я пытаюсь либо выделить ячейку, либо отключить виджет, когда пользователь щелкнул по нему. Я попытался получить виджет из таблицы с помощью cellwidget (r, c) и setEnabled (False), но он не работает. Есть ли другой способ сделать это?
class GraphicsScene(QGraphicsScene):
def __init__(self, parent=None):
super(GraphicsScene, self).__init__(parent)
self.setSceneRect(0, 0, 640, 480)
self.setItemIndexMethod(QGraphicsScene.NoIndex)
self.setBackgroundBrush(QBrush(Qt.black))
class GraphicsView(QGraphicsView):
def __init__(self, parent=None):
super(GraphicsView, self).__init__(parent)
self.setScene(GraphicsScene(self))
self.setAcceptDrops(True)
self.setRenderHint(QPainter.HighQualityAntialiasing)
def dragMoveEvent(self, event):
if event.mimeData().hasImage():
event.acceptProposedAction()
def dropEvent(self, event):
if event.mimeData().hasImage():
pixmap = event.mimeData().imageData()
if self.scene() is not None:
it = self.scene().addPixmap(pixmap)
it.setPos(self.mapToScene(event.pos()))
event.acceptProposedAction()
class ImageWidget(QWidget):
def __init__(self, imagePath, parent=None):
super(ImageWidget, self).__init__(parent)
self.picture = QPixmap(imagePath)
def paintEvent(self, event):
painter1 = QPainter(self)
painter1.drawPixmap(0, 0, self.picture)
def mousePressEvent(self, event):
table=DragWindow()
x=table.tableitem.cellwidget(0,0)
x.setEnabled(False)
if event.button() == Qt.LeftButton:
drag = QDrag(self)
mimeData = QMimeData()
mimeData.setImageData(self.picture)
drag.setMimeData(mimeData)
drag.setPixmap(self.picture)
drag.setHotSpot(event.pos())
drag.exec_()
class DragTableItem(QTableWidget):
def __init__(self, parent=None):
super(DragTableItem, self).__init__(parent)
self.setRowCount(20)
self.setColumnCount(2)
col = "FlipHor"
newItem = QTableWidgetItem(col)
self.setImage(0, 1, "symbol.png")
def setImage(self, row, col, imagePath):
image = ImageWidget(imagePath)
self.setCellWidget(row, col, image)
class DragWindow(QWidget):
def __init__(self, parent=None):
super(DragWindow, self).__init__(parent)
lay = QVBoxLayout(self)
lay.setSpacing(0)
lay.setContentsMargins(0, 0, 0, 0)
self.tableitem = DragTableItem()
self.tableitem.setMinimumSize(300,300)
lay.addWidget(self.tableitem)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.view = GraphicsView()
self.table = DragWindow()
widget = QWidget()
self.setCentralWidget(widget)
horizontalLayout = QHBoxLayout(widget)
horizontalLayout.addWidget(self.table)
horizontalLayout.addWidget(self.view)
self.resize(640, 480)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())