DragAndDrop(1)

24 篇文章 1 订阅
# -*- coding: utf-8 -*-
"""
Author: Virgil
Date: 2020/6/13 13:40
"""

from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets
from shiboken2 import wrapInstance

import maya.OpenMayaUI as omui
import maya.cmds as cmds
import maya.mel as mel

def maya_main_window():
    """
    Return the Maya main window widget as a Python object
    """
    main_window_ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)

class TextEditor(QtWidgets.QPlainTextEdit):
    def __init__(self, parent=None):
        super(TextEditor, self).__init__(parent)

    def set_drop_enabled(self, enabled):
        self.setAcceptDrops(enabled)
        print("TODO: Implement set_drop_enabled()")

    def open_file(self, file_path):
        print("TODO: open_file()")

        if file_path:
            file_info = QtCore.QFileInfo(file_path)
            if file_info.exists() and file_info.isFile():
                f = QtCore.QFile(file_info.absoluteFilePath())
                if f.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
                    text_stream = QtCore.QTextStream(f)
                    text_stream.setCodec("UTF-8")

                    text = text_stream.readAll()

                    f.close()

                    self.setPlainText(text)

    def dragEnterEvent(self, event):
        print("Enter Event")
        
        mime_data = event.mimeData()
        # if mime_data.hasFormat("text/plain") or mime_data.hasFormat("text/uri-list"):
        if mime_data.hasText() or mime_data.hasUrls():
            event.acceptProposedAction()

    def dragLeaveEvent(self, event):
        print("Leave Event")

    def dragMoveEvent(self, event):
        print("Move Event")
        # event.setAccepted(event.pos().x() < 100)
        
    def dropEvent(self, event):
        print("Drop Event")

        if event.mimeData().hasUrls():
            urls = event.mimeData().urls()

            file_path = urls[0].toLocalFile()
            self.open_file(file_path)

            return

        super(TextEditor, self).dropEvent(event)

class TextEditDialog(QtWidgets.QDialog):
    WINDOW_TITLE = "Drag and Drop Example"
    
    def __init__(self, parent=maya_main_window()):
        super(TextEditDialog, self).__init__(parent)

        self.setWindowTitle(self.WINDOW_TITLE)
        self.setMinimumSize(600, 400)
        self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_layout()
        self.create_connections()

    def create_widgets(self):
        self.editor = TextEditor()

        self.drop_enabled_cb = QtWidgets.QCheckBox("Drop Enabled")
        self.drop_enabled_cb.setChecked(True)

        self.clear_bttn = QtWidgets.QPushButton("Clear")
        self.close_bttn = QtWidgets.QPushButton("Close")

    def create_layout(self):
        button_layout = QtWidgets.QHBoxLayout()
        button_layout.setSpacing(4)
        button_layout.addWidget(self.drop_enabled_cb)
        button_layout.addStretch()
        button_layout.addWidget(self.clear_bttn)
        button_layout.addWidget(self.close_bttn)

        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.addWidget(self.editor)
        main_layout.addLayout(button_layout)

    def create_connections(self):
        self.drop_enabled_cb.toggled.connect(self.set_drop_enabled)
        self.clear_bttn.clicked.connect(self.clear_editor)
        self.close_bttn.clicked.connect(self.close)

    def set_drop_enabled(self, enabled):
        self.editor.set_drop_enabled(enabled)

    def clear_editor(self):
        self.editor.clear()

def showWindow():
    global dialog
    try:
        dialog.close()
        dialog.deleteLater()
    except:
        pass

    dialog = TextEditDialog()
    dialog.show()

if __name__ == "__main__":
    try:
        dialog.close()
        dialog.deleteLater()
    except:
        pass

    dialog = TextEditDialog()
    dialog.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值