2012-05-09 84 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

下面當你將按鈕放到桌子上,並在「打印位置」工作?它應該將拖放位置的座標打印到您的外殼。 我認爲你需要使用這些按鈕然後插入到表中。

得到它的工作 - 你的drop事件改成這樣:

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

不錯!如果這有幫助,隨意點擊綠色複選標記。需要明白我的觀點! :) –

相關問題