2016-11-19 101 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)