2016-11-19 98 views
1

标题基本上说这一切。我想创建一个可以在窗口内拖动的图像。我的代码到目前为止都是这样做的,但由于某种原因,即使我使用scaled()函数来调整它的大小,图像显得非常小。另外,如果我更改scaled()函数内的值,则图像消失。PySide Qt:拖放图像

from PySide.QtGui import * 
from PySide.QtCore import * 
import sys 


class Label(QLabel): 
    def __init__(self, title, parent): 
     super(Label, self).__init__(title, parent) 
     self.setup() 

    def setup(self): 
     folder_pic = QPixmap("path") 
     folder_size = folder_pic.scaled(64, 64) 
     self.label = QLabel(self) 
     self.label.setPixmap(folder_size) 

    def mouseMoveEvent(self, e): 

     if e.buttons() != Qt.LeftButton: 
      return 

     mimeData = QMimeData(self) 

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

     dropAction = drag.start(Qt.MoveAction) 

class Example(QWidget): 

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

    def initUI(self): 
     self.setAcceptDrops(True) 
     self.button = Label("", self) 
     self.button.move(100, 65) 
     self.setWindowTitle('Click or Move') 
     self.setGeometry(300, 300, 280, 150) 


    def dragEnterEvent(self, e): 

     e.accept() 

    def dropEvent(self, e): 

     position = e.pos() 
     self.button.move(position) 
     e.setDropAction(Qt.MoveAction) 
     e.accept() 



if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    mywin = Example() 
    mywin.show() 
    sys.exit(app.exec_()) 

我的代码是基于本教程http://zetcode.com/gui/pysidetutorial/dragdrop/

回答

2

您设置拖动对象上的像素图:

drag.setPixmap(self.pixmap()) 

但对于工作,你还需要此修复程序:

def setup(self): 
    folder_pic = QPixmap("path") 
    folder_size = folder_pic.scaled(64, 64) 
    self.setPixmap(folder_size)