2012-05-09 5 views
1

버튼을 QTableWidget으로 드래그 앤 드롭하면 버튼이 이전 위치에서 사라지고 버튼을 놓는 셀에는 아무 것도 표시되지 않습니다.QTableWidget - 버튼을 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() 

답변

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() 

건배

+0

, 그것은 내가 행과 열을 찾을 수있는 방법을 찾고 있었다, 지금 작동 감사 위치 개체에서. 나는 문서를 보았지만 rowAt() 및 columnAt() 메서드를 찾지 못했습니다. 고마워, 내 시간을 구 했어 :) – likeToCode

+1

니스! 도움이된다면 녹색 체크 표시를 누르십시오. 내 포인트를 얻을 필요가있어! :) –