1

ボタンをQTableWidgetにドラッグアンドドロップすると、ボタンは古い位置から消え、ボタンをドロップしたセルには何も表示されません。

誰かが問題を提案できますか?

コードの下を見つけてください

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore

class Button(QtGui.QPushButton):

    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)

    def mouseMoveEvent(self, e):
        if e.buttons() != QtCore.Qt.RightButton:
            return 

        mimeData = QtCore.QMimeData()
        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(e.pos() - self.rect().topLeft())

        dropAction = drag.start(QtCore.Qt.MoveAction)

    def mousePressEvent(self, e):
        if e.button() == QtCore.Qt.LeftButton:
            print 'Left Button Pressed'


class MyTable(QtGui.QTableWidget):

    def __init__(self, rows, columns, butObject, parent):
        super(MyTable, self).__init__(rows, columns, parent)
        self.setAcceptDrops(True)
        self.butObject = butObject

    def dragEnterEvent(self, e):
        e.accept()

    def dropEvent(self, e):
        position = e.pos()

        print position

        self.butObject.move(position)

        e.setDropAction(QtCore.Qt.MoveAction)
        e.accept()

    def dragMoveEvent(self, e):
        e.accept()

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.setAcceptDrops(True)

        self.button = Button('Button', self)
        self.button.move(50, 200)

        self.table = MyTable(2, 2, self.button, self)
        self.table.setAcceptDrops(True)
        self.table.setDragEnabled(True)

        self.setWindowTitle('Click or Move')
        #self.setGeometry(300, 300, 280, 150)

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

if __name__ == '__main__':
    main()  
4

1 に答える 1

3

ボタンをテーブルにドロップすると、「印刷位置」は機能しますか?ドロップ位置の座標をシェルに出力する必要があります。それらを使ってボタンをテーブルに挿入する必要があると思います。

動作しました-ドロップイベントを次のように変更します。

    position = e.pos()

    print position

    row = self.rowAt(position.y())

    column = self.columnAt(position.x())

    self.setCellWidget(row,column,self.butObject)

    e.setDropAction(QtCore.Qt.MoveAction)
    e.accept()

乾杯

デイブ

于 2012-05-10T11:06:12.020 に答える