Tim*_*man 11 python drag-and-drop pyqt pyqt4
我正在尝试设置一个应用程序,它将接受放入其中的havin文件.所以,我正在寻找一种方法来提取它们的路径.
现在,我已经为应用程序的正确部分启用了拖放功能,它将接受放入的文本,但我不知道如何处理文件丢失.
我在用:
def PTE_dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
def PTE_dropEvent(self, e):
newText = self.ui.fileListPTE.toPlainText() + '\n\n' + e.mimeData().text()
self.ui.fileListPTE.setPlainText(newText)
Run Code Online (Sandbox Code Playgroud)
这稍微修改了PyQT4教程中Drag and Drop中提供的代码.
我无法得到@ekhumoro为我工作的答案,但它给了我更多的地方,我找到了PyQT4:将文件拖放到QListWidget中帮助了.
除了ekhumoro提出的建议,我还需要实现拖动移动事件.我最终使用的是:
def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
else:
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
newText = self.ui.fileListPTE.toPlainText()
for url in event.mimeData().urls():
newText += '\n' + str(url.toLocalFile())
self.ui.fileListPTE.setPlainText(newText)
self.emit(QtCore.SIGNAL("dropped"))
else:
event.ignore()
Run Code Online (Sandbox Code Playgroud)
ekh*_*oro 15
本QMimeData
类有处理方法dropped urls
:
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
for url in event.mimeData().urls():
path = url.toLocalFile().toLocal8Bit().data()
if os.path.isfile(path):
print path
# do other stuff with path...
Run Code Online (Sandbox Code Playgroud)