Native Maya Widgets(1)

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

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 NativeMayaWidgets(QtWidgets.QDialog):
    WINDOW_TITLE = "Native Maya Widgets"

    dlg_instance = None
    def __init__(self, parent=maya_main_window()):
        super(NativeMayaWidgets, self).__init__(parent)

        self.setWindowTitle(self.WINDOW_TITLE)
        self.setMinimumSize(600, 400)

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

        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.on_timer_fired)
        # self.timer.start()

    def create_widgets(self):
        pass

    def create_layout(self):
        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.setContentsMargins(5, 5, 5, 5)

    def create_connections(self):
        app = QtWidgets.QApplication.instance()
        app.focusChanged.connect(self.on_focus_changed)

    def print_hierarchy(self, widget):
        if widget:
            output = []

            name = widget.objectName()
            if not name:
                name = "<Object name not set>"

            output.append("Widget: {0}".format(name))

            parent_widget = widget.parentWidget()
            while parent_widget:
                parent_name = parent_widget.objectName()

                output.append("--> Parent: {0}".format(parent_name))
                parent_widget = parent_widget.parentWidget()
            output.append("---")
            print("\n".join(output))

    def on_timer_fired(self):
        focus_widget = QtWidgets.QApplication.focusWidget()
        if focus_widget:
            print("Widget with focus (object name): {0}".format(focus_widget.objectName()))

    def on_focus_changed(self, old_widget, new_widget):
        if self.isVisible():
            if new_widget:
                # print("Widget with focus (object name): {0}".format(new_widget.objectName()))
                self.print_hierarchy(new_widget)

    def closeEvent(self, event):
        self.timer.stop()

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

    dialog = NativeMayaWidgets()
    dialog.show()

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值