zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    0909我眼中的编译原理
    你要的所有数据源都在这里了!
    JAVA多线程和并发基础
    写的代码小有成就+今日总结--购买产品---20200508
    mysql数据库时区问题
    【Spring】——声明式事务配置详解
    SpringBoot整合阿里云OSS文件上传、下载、查看、删除
    一文看懂:网址,URL,域名,IP地址,DNS,域名解析
    git快速入门
    批处理框架spring batch基础知识介绍
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4851876.html
Copyright © 2011-2022 走看看