Простой пользовательский интерфейс для копирования файлов между местоположениями с помощью PySide2 - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в Python и пытаюсь создать пользовательский интерфейс для копирования файлов между двумя местами в Maya, простым перетаскиванием между двумя списками структуры папок. Я попытался реплицировать примеры кодов из Интернета, чтобы заставить его работать, но не мог заставить его делать что-либо, кроме простого отображения пользовательского интерфейса.

from PySide2 import QtWidgets, QtCore

class dirTreeView(QtWidgets.QTreeView):
    def __init__(self, parent=None):
        super(dirTreeView, self).__init__(parent)
        self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
        self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
        self.setDropIndicatorShown(True)

    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.proposedAction()
            links = []
            for url in event.mimeData().urls():
                links.append(str(url.toLocalFile()))
            self.emit(QtCore.SIGNAL("accepted()"), links)
        else:
            event.ignore()

window = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout()
srcDataModel = QtWidgets.QFileSystemModel()
srcDataModel.setRootPath(QtCore.QDir.currentPath())#will have src path
srcModel = dirTreeView()
srcModel.setModel(srcDataModel)
srcDataModel.setRootPath(QtCore.QDir.currentPath())#will have des path
desModel = dirTreeView()
desModel.setModel(srcDataModel)
layout.addWidget(srcModel, 0, 0)
layout.addWidget(desModel, 0, 1)
window.setLayout(layout)
window.show()

Просто нужно скопировать файлы из одного места в другое с помощью перетаскивания, ничего больше.

...