PyQtでファイルのドラッグ&ドロップ


スクリプトのアイコンにファイルを大量にドラッグ&ドロップしようとすると、
エラーが出るので、ウィンドウを作ってそこにD&D;させるスクリプトを書いてみました。

#encoding:shift-jis
from __future__ import division, with_statement, print_function
import sys
import subprocess

if sys.argv[2:]:
    cmd = [sys.executable] + sys.argv[1:]
    exit(subprocess.call(cmd))

from PyQt4.QtGui import *

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        
        self.setWindowTitle(u"D&D")
        self.resize(160, 120)
        self.setAcceptDrops(True)
    
    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore() 
    
    def dropEvent(self, event):
        cmd = [sys.executable, sys.argv[1]] + \
              [unicode(u.toLocalFile()) for u in event.mimeData().urls()]
        exit(subprocess.call(cmd))
    
app = QApplication(sys.argv)

w = MainWidget()
w.show()
exit(app.exec_())