как отключить ячейку Qtablewidget? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть 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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...