Drag and Drop in PyQt4 PyQt4中的拖放操作

::-- zhuyj [2008-07-20 07:27:47]

1. Drag and Drop in PyQt4

1.1. Simple Drag and Drop

简单的拖放

   1 #!/usr/bin/python
   2 # dragdrop.py
   3 import sys
   4 from PyQt4 import QtGui
   5 class Button(QtGui.QPushButton):
   6     def __init__(self, title, parent):
   7         QtGui.QPushButton.__init__(self, title, parent)
   8         self.setAcceptDrops(True)
   9     def dragEnterEvent(self, event):
  10         if event.mimeData().hasFormat('text/plain'):
  11             event.accept()
  12         else:
  13             event.ignore()
  14     def dropEvent(self, event):
  15             self.setText(event.mimeData().text())
  16 class DragDrop(QtGui.QDialog):
  17     def __init__(self, parent=None):
  18         QtGui.QDialog.__init__(self, parent)
  19         self.resize(280, 150)
  20         self.setWindowTitle('Simple Drag & Drop')
  21         edit = QtGui.QLineEdit('', self)
  22         edit.setDragEnabled(True)
  23         edit.move(30, 65)
  24         button = Button("Button", self)
  25         button.move(170, 65)
  26 
  27 
  28         screen = QtGui.QDesktopWidget().screenGeometry()
  29         size =  self.geometry()
  30         self.move((screen.width()-size.width())/2,
  31             (screen.height()-size.height())/2)
  32 app = QtGui.QApplication(sys.argv)
  33 icon = DragDrop()
  34 icon.show()
  35 app.exec_()

   1  class Button(QtGui.QPushButton):
   2      def __init__(self, title, parent):
   3          QtGui.QPushButton.__init__(self, title, parent)

 self.setAcceptDrops(True)

   1  def dragEnterEvent(self, event):
   2      if event.mimeData().hasFormat('text/plain'):
   3          event.accept()
   4      else:
   5          event.ignore()

   1  def dropEvent(self, event):
   2      self.setText(event.mimeData().text())

 edit = QtGui.QLineEdit('', self)
 edit.setDragEnabled(True)

Simple Drag & Drop Figure: Simple Drag & Drop

1.2. Drag & drop a button widget

拖放按钮组件

   1 #!/usr/bin/python
   2 # dragbutton.py
   3 import sys
   4 from PyQt4 import QtGui
   5 from PyQt4 import QtCore
   6 class Button(QtGui.QPushButton):
   7     def __init__(self, title, parent):
   8         QtGui.QPushButton.__init__(self, title, parent)
   9     def mouseMoveEvent(self, event):
  10 
  11         if event.buttons() != QtCore.Qt.RightButton:
  12             return
  13         mimeData = QtCore.QMimeData()
  14         drag = QtGui.QDrag(self)
  15         drag.setMimeData(mimeData)
  16         drag.setHotSpot(event.pos() - self.rect().topLeft())
  17         dropAction = drag.start(QtCore.Qt.MoveAction)
  18         if dropAction == QtCore.Qt.MoveAction:
  19             self.close()
  20     def mousePressEvent(self, event):
  21         QtGui.QPushButton.mousePressEvent(self, event)
  22         if event.button() == QtCore.Qt.LeftButton:
  23             print 'press'
  24 class DragButton(QtGui.QDialog):
  25     def __init__(self, parent=None):
  26         QtGui.QDialog.__init__(self, parent)
  27         self.resize(280, 150)
  28         self.setWindowTitle('Click or Move')
  29         self.setAcceptDrops(True)
  30         self.button = Button('Close', self)
  31         self.button.move(100, 65)
  32 
  33 
  34         screen = QtGui.QDesktopWidget().screenGeometry()
  35         size =  self.geometry()
  36         self.move((screen.width()-size.width())/2,
  37             (screen.height()-size.height())/2)
  38     def dragEnterEvent(self, event):
  39          event.accept()
  40     def dropEvent(self, event):
  41         position = event.pos()
  42         button = Button('Close', self)
  43         button.move(position)
  44         button.show()
  45         event.setDropAction(QtCore.Qt.MoveAction)
  46         event.accept()
  47 app = QtGui.QApplication(sys.argv)
  48 db = DragButton()
  49 db.show()
  50 app.exec_()

   1  class Button(QtGui.QPushButton):
   2      def __init__(self, title, parent):
   3          QtGui.QPushButton.__init__(self, title, parent)

 if event.buttons() != QtCore.Qt.RightButton:
     return

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

 dropAction = drag.start(QtCore.Qt.MoveAction)
 if dropAction == QtCore.Qt.MoveAction:
     self.close()

   1  def mousePressEvent(self, event):
   2      QtGui.QPushButton.mousePressEvent(self, event)
   3      if event.button() == QtCore.Qt.LeftButton:
   4          print 'press'

 position = event.pos()
 button = Button('Close', self)
 button.move(position)
 button.show()

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

2. 交流

Drag_and_Drop_拖放操作 (last edited 2009-12-25 07:15:41 by localhost)