ZetCode PyQt4 tutorial Drag and Drop

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial

This is a simple drag and
drop example. 

author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""

import sys
from PyQt4 import QtGui

# In order to drop text on the QtGui.QPushButton widget, we must reimplement some methods. Therefore, we create our own Button class which inherits from the QtGui.QPushButton class.
class Button(QtGui.QPushButton):

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

        # We enable drop events for the widget.
        self.setAcceptDrops(True)

    # First, we reimplement the dragEnterEvent() method. We inform about the data type that we accept. In our case it is plain text.
    def dragEnterEvent(self, e):

        if e.mimeData().hasFormat('text/plain'):
            e.accept()
        else:
            e.ignore() 

    # By reimplementing the dropEvent() method we define what we will do upon the drop event. Here we change the text of the button widget.
    def dropEvent(self, e):
        self.setText(e.mimeData().text()) 

class Example(QtGui.QWidget):

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

        self.initUI()

    def initUI(self):

        edit = QtGui.QLineEdit('', self)
        # The QtGui.QLineEdit widget has a built-in support for drag operations. All we need to do is to call setDragEnabled() method to activate it.
        edit.setDragEnabled(True)
        edit.move(30, 65)

        button = Button("Button", self)
        button.move(190, 65)

        self.setWindowTitle('Simple drag & drop')
        self.setGeometry(300, 300, 300, 150)

def main():

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

if __name__ == '__main__':
    main()   

--------------------------------------------------------------------------------

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial

In this program, we can press on a button
with a left mouse click or drag and drop the
button with  the right mouse click. 

author: Jan Bodnar
website: zetcode.com
last edited: October 2013
"""

import sys
from PyQt4 import QtCore, QtGui

# We create a Button class which will derive from the QtGui.QPushButton. We also reimplement two methods of the QtGui.QPushButton: the mouseMoveEvent() and the mousePressEvent(). The mouseMoveEvent() method is the place where the drag & drop operation begins.
class Button(QtGui.QPushButton):

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

    def mouseMoveEvent(self, e):

        # Here we decide that we can perform drag & drop only with a right mouse button. The left mouse button is reserved for clicking on the button.
        if e.buttons() != QtCore.Qt.RightButton:
            return

        # The QDrag object is created. The class provides support for MIME-based drag and drop data transfer.
        mimeData = QtCore.QMimeData()

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

        # The start() method of the drag object starts the drag & drop operation.
        dropAction = drag.start(QtCore.Qt.MoveAction)

    # We print 'press' to the console if we left click on the button with the mouse. Notice that we call mousePressEvent() method on the parent as well. Otherwise, we would not see the button being pushed.
    def mousePressEvent(self, e):

        super(Button, self).mousePressEvent(e)

        if e.button() == QtCore.Qt.LeftButton:
            print 'press'

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(100, 65)

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

    def dragEnterEvent(self, e):

        e.accept()

    def dropEvent(self, e):

        # In the dropEvent() method we code what happens after we release the mouse button and finish the drop operation. We find out the current mouse pointer position and move the button accordingly.
        position = e.pos()
        self.button.move(position)

        # We specify the type of the drop action. In our case it is a move action.
        e.setDropAction(QtCore.Qt.MoveAction)
        e.accept()

def main():

    app = QtGui.QApplication([])
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

 

时间: 2024-07-29 08:38:20

ZetCode PyQt4 tutorial Drag and Drop的相关文章

ZetCode PyQt4 tutorial work with menus, toolbars, a statusbar, and a main application window

!/usr/bin/python -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This program creates a statusbar. author: Jan Bodnar website: zetcode.com last edited: September 2011 """ import sys from PyQt4 import QtGui class Example(QtGu

ZetCode PyQt4 tutorial layout management

!/usr/bin/python -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This example shows three labels on a window using absolute positioning. author: Jan Bodnar website: zetcode.com last edited: October 2011 """ import sys from P

ZetCode PyQt4 tutorial signals and slots

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we connect a signal of a QtGui.QSlider to a slot of a QtGui.QLCDNumber. author: Jan Bodnar website: zetcode.com last edited: October 2011 ""&quo

ZetCode PyQt4 tutorial Dialogs

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we receive data from a QtGui.QInputDialog dialog. author: Jan Bodnar website: zetcode.com last edited: October 2011 """ import sys from PyQ

ZetCode PyQt4 tutorial widgets II

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we dispay an image on the window. author: Jan Bodnar website: zetcode.com last edited: September 2011 """ import sys from PyQt4 import QtGu

ZetCode PyQt4 tutorial custom widget

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we create a custom widget. author: Jan Bodnar website: zetcode.com last edited: October 2011 """ import sys from PyQt4 import QtGui, QtCore

ZetCode PyQt4 tutorial basic painting

#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial In this example, we draw text in Russian azbuka. author: Jan Bodnar website: zetcode.com last edited: September 2011 """ import sys from PyQt4 import QtGui,

HTML5 拖放(Drag和drop)

在工作当中,我们会常常见到像UC浏览器的新选项卡一样的可以自定义拖拽摆放效果.大的像淘宝的装修,QQ空间装扮等,小到一些游戏等等随处可见拖放的使用场景. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 目前浏览器支持情况:Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放.注释:在 Safari 5.1.2 中不支持拖放. 下面看看一个具体的字母拖放demo:

拖动-android drag and drop

问题描述 android drag and drop 使用drag and drop框架,给视图A.B.C绑定onDrag()方法,调用了A的onDrag方法后,调用B的onDrag方法会触发A的ondrag方法,求解