【问题标题】:maximize custom window in python / mel in maya在maya中最大化python / mel中的自定义窗口
【发布时间】:2017-07-29 22:16:38
【问题描述】:

我在 python 脚本中有一个简单的窗口,例如:

if cmds.window('test', exists = True): cmds.deleteUI('test')
self.window = cmds.window('test')

我想将窗口最大化到它的原点(如果最小化)或调整到某个位置,这样我就可以看到并且很容易注意到,而不是删除窗口并在每次执行时重置控件,有什么办法吗?我知道如果存在我可以通过/取消,但我只想调整窗口大小
谢谢。

【问题讨论】:

    标签: python maya mel


    【解决方案1】:

    我认为使用 maya cmds 是不可能的,但你可以在没有 Qt 的情况下做到这一点。 以下是混合解决方案的示例:

    from PyQt4 import QtGui
    from sip import wrapinstance
    import maya.OpenMayaUI as omui
    
    def mayaToQT( name ):
        # Maya -> QWidget
        ptr = omui.MQtUtil.findControl( name )
        if ptr is None:         ptr = omui.MQtUtil.findLayout( name )
        if ptr is None:         ptr = omui.MQtUtil.findMenuItem( name )
        if ptr is not None:     return wrapinstance( long( ptr ), QtGui.QWidget )
    
    # create a basic window
    def createWin():
        window = cmds.window( title="Long Name", iconName='Short Name', widthHeight=(200, 55) )
        cmds.columnLayout( adjustableColumn=True )
        cmds.button( label='Do Nothing' )
        cmds.button( label='Close', command=('cmds.deleteUI(\"' + window + '\", window=True)') )
        cmds.setParent( '..' )
        cmds.showWindow( window )
        return window
    
    # First creation
    win = createWin()
    qtWin = mayaToQT(win)
    if cmds.window(win, exists = True):
        geom = qtWin.geometry()
        cmds.deleteUI(win)
    
    # Second Creation and put the window back where it was
    win = createWin()
    qtWin = mayaToQT(win)
    qtWin.setGeometry(geom)
    

    设置几何图形可以在屏幕上的任意位置或任何你zqnt上完成

    【讨论】:

    • 嘿,谢谢,但我无法在 maya 2015 中使用代码,因为我没有使用 pyQt,所以我将导入更改为 pysidesip 到 shiboken,但仍然无法导入 wrapinstance 我错过了什么?
    • wrapinstance 在 pyside 中写为 wrapInstance,大写为 i
    【解决方案2】:

    您手头有几个选项,具体取决于您希望它的外观...这些都是默认的 python / maya 函数,并且可以在以前的版本中使用,回到 Autodesk Maya 2012。

    停靠您的窗口

    您可以将窗口停靠到特定的一侧,这将有助于您在 Maya 中管理您的场景。最简单的方法是:

    # Import your maya command package
    import maya.cmds as cmds
    try:
        # Try to delete your window then the dock
        cmds.deleteUI("yourWnd")
        cmds.deleteUI("yourDock")
    except:
        pass
    # Parent your window to this dock and then show the dock instead of the window
    cmds.window("yourWnd")
    cmds.columnLayout("col")
    cmds.button("button1")
    cmds.setParent("col")
    cmds.dockControl("yourDock", 
                     allowedArea = ["left","right"],
                     area = "left",
                     content = "yourWnd",
                     floating = False)
    

    这会将您的 UI 放置在 Maya 窗口中易于访问的位置。

    调整窗口大小

    如果您决定创建一个窗口,您可以轻松地添加一个按钮或在您的窗口中调整窗口大小...

    import maya.cmds as cmds
    import ctypes
    # having imported the ctypes package, you can get viable os system info
    user32 = ctypes.windll.user32
    # Getting the screen size of your main window
    screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
    cmds.window("yourWnd")
    cmds.columnLayout("col")
    # A button that allows you to imitate maximizing your window on your mainscreen
    cmds.button("maxPlease",
                label = "Maximize",
                command = """cmds.window("yourWnd",
                                         edit=True,
                                         topLeftCorner = [0,0],
                                         widthHeight = [screensize[0],
                                                        screensize[1]])
                          """)
    cmds.setParent("col")
    cmds.showWindow("yourWnd")
    

    这些只是基础知识,您可以混合搭配这两者来制定您自己的解决方案。我强烈推荐使用 ctypes,因为它肯定会帮助您调整大小以最大化您的窗口。

    【讨论】:

    • 我正在接近您使用 ctype 调整窗口大小和恢复窗口的解决方案,就像这个答案 [链接]stackoverflow.com/questions/32344140/… 但我无法获得窗口句柄,当我查看 winspector /spy++ 时,所有窗口类Maya 下是 QWidget,任何窗口名称都无关紧要,我错过了什么吗?
    • 它的父程序是 Maya,所以这是有道理的。我的日常工作计算机上没有安装 winspector。但是,我提供的特定实例是 Maya 和 Python Vanilla 脚本,不使用 PySide 或 PyQT……所以找到一个 QWidget 类是违反规定的,因为它没有使用它。
    • 但是,最小化窗口的更简单方法是使用执行此操作的命令设置按钮:`cmds.button("minPlease", label = "Minimize", command = "cmds.窗口('yourWnd',编辑=真,图标化=真)"
    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多