[python for maya pySide或openMaya [处于保留状态]

问题描述 投票:0回答:3

我需要位置光标的draggerContext方法提供给我的anchorPoint值。但是我不想通过setToolTo输入draggerContext。我使用了QtGui.QCursor.pos(),但是它提供了不同的值。如果有人可以指导我。谢谢

from maya import cmds
from PySide2 import QtGui, QtCore, QtWidgets

data = {
    "timer": None
}

class Test:
    def __init__(self):
        self.ctx = 'ctx'
        self.cursor = 'default'

    def Event(self):
        currentPos = QtGui.QCursor().pos()
        widget = QtWidgets.qApp.widgetAt(currentPos)
        relpos = widget.mapFromGlobal(currentPos)
        print currentPos
        print relpos
        print "relpos-X : "+str(relpos.x())
        print "relpos-Y : "+str(relpos.y())
        print QtCore.QEvent.KeyPress
        vpX, vpY, _ = cmds.draggerContext(self.ctx, query=True, anchorPoint=True)
        print "VP-X : "+str(vpX)
        print "VP-Y : "+str(vpY)

    def Press(self):
        if cmds.dagObjectHit():self.Event()

    def Start(self):
        """Track the cursor"""
        if data["timer"] is not None:
            data["timer"].stop()

        if not cmds.dagObjectHit():self.Start()
        self.Ctx()
        timer = QtCore.QTimer()
        print timer
        timer.setInterval(0)
        timer.timeout.connect(self.Press)
        timer.start()
        # Store reference
        data["timer"] = timer

    def Stop(self):
        if data["timer"] is not None:
            data["timer"].stop()
            data["timer"] = None

    def Ctx(self):
        if cmds.draggerContext(self.ctx,ex=True):cmds.deleteUI(self.ctx)
        self.context = cmds.currentCtx()
        cmds.draggerContext(self.ctx,n=self.ctx,cur=self.cursor,pc=self.Press)
        cmds.setToolTo(self.ctx)

start = Test()
start.Start()
#start.Stop()

我不想使用draggerContext方法并且不输入self.ctx。但是relpos。()的值不同于vpY

python maya pyside2 qtgui anchorpoint
3个回答
0
投票

我认为我发现了一个错误。QtGui.QCursor()。pos()从上方进行计算,但锚点从下方进行计算。现在,如果您有更好的解决方案来获取anchorPoint。感谢您的指导。


0
投票
from maya import cmds
from PySide2 import QtGui, QtCore, QtWidgets

data = {
    "timer": None
}

class Test:
    def __init__(self):
        self.ctx = 'ctx'
        self.cursor = 'default'

    def Event(self):
        currentPos = QtGui.QCursor().pos()
        widget = QtWidgets.qApp.widgetAt(currentPos)
        relpos = widget.mapFromGlobal(currentPos)
        print currentPos
        print relpos
        print "relpos-X : "+str(relpos.x())
        print "relpos-Y : "+str(relpos.y())
        print QtCore.QEvent.KeyPress
        vpX, vpY, _ = cmds.draggerContext(self.ctx, query=True, anchorPoint=True)
        print "VP-X : "+str(vpX)
        print "VP-Y : "+str(vpY)

    def Press(self):
        if cmds.dagObjectHit():self.Event()

    def Start(self):
        """Track the cursor"""
        if data["timer"] is not None:
            data["timer"].stop()

        if not cmds.dagObjectHit():self.Start()
        self.Ctx()
        timer = QtCore.QTimer()
        print timer
        timer.setInterval(0)
        timer.timeout.connect(self.Press)
        timer.start()
        # Store reference
        data["timer"] = timer

    def Stop(self):
        if data["timer"] is not None:
            data["timer"].stop()
            data["timer"] = None

    def Ctx(self):
        if cmds.draggerContext(self.ctx,ex=True):cmds.deleteUI(self.ctx)
        self.context = cmds.currentCtx()
        cmds.draggerContext(self.ctx,n=self.ctx,cur=self.cursor,pc=self.Press)
        cmds.setToolTo(self.ctx)

start = Test()
#start.Start()
start.Stop()      

0
投票

我认为我发现了一个错误。QtGui.QCursor()。pos()从上方进行计算,但锚点从下方进行计算。现在,如果您有更好的解决方案来获取anchorPoint。感谢您的指导。

© www.soinside.com 2019 - 2024. All rights reserved.