我正在努力阻止&下降工作。我希望能夠將從QPushButton拖放到QTableView的單元格中。我在網上看了一些教程,但似乎陷入了第一步。下面的例子是從驚人的zetcode教程改變: http://zetcode.com/tutorials/pyqt4/dragdrop/如何拖放到QTableWidget中? (PyQT)
使用下面的代碼,當我將按鈕拖動到tableWidget的dragEnterEvent似乎被調用,但是一旦我將鼠標懸停在桌子上,我得到這個符號,我不允許掉在桌子上,所以永遠不能到達丟棄事件:(
我不得不承認我是相當新的pyqt,所以可能會丟失一些非常簡單的東西。感謝任何幫助,我可以得到! 乾杯 Dave
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):
QtGui.QPushButton.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print 'press'
class MyTable(QtGui.QTableWidget):
def __init__(self, rows, columns, parent):
super(MyTable, self).__init__(rows, columns, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print e.accept()
def dropEvent(self, e):
print 'blah'
position = e.pos()
self.button.move(position)
e.setDropAction(QtCore.Qt.MoveAction)
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.table = MyTable(2,2,self)
self.table.setAcceptDrops(True)
self.table.setDragEnabled(True)
self.setWindowTitle('Click or Move')
self.setGeometry(300, 300, 280, 150)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.table)
self.setLayout(layout)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
太棒了,謝謝,那就是它!也感謝您指出佈局問題。對於我正在處理的更復雜的案例來說,這實際上只是一個測試案例,所以會看到它是否會影響它。 – 2012-04-23 15:17:04
@David Basalla:甜!如果這個答案解決了它,不要忘記打綠色的選中標記。祝你好運! – jdi 2012-04-23 15:31:22
@jdi謝謝,自己也在想這個 – 2012-04-23 16:28:45