Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Maya PySide窗口-记住位置和大小_Python_Window_Pyside_Maya - Fatal编程技术网

Python Maya PySide窗口-记住位置和大小

Python Maya PySide窗口-记住位置和大小,python,window,pyside,maya,Python,Window,Pyside,Maya,我在Pyside工作。每次我重新打开窗口,它就会弹回到屏幕中间。如何让Maya或Windows记住位置和大小 以下是我正在使用的一些基本代码: import traceback from PySide import QtCore from PySide import QtGui from shiboken import wrapInstance import maya.cmds as cmds import maya.OpenMayaUI as omui import pymel.core as

我在Pyside工作。每次我重新打开窗口,它就会弹回到屏幕中间。如何让Maya或Windows记住位置和大小

以下是我正在使用的一些基本代码:

import traceback
from PySide import QtCore
from PySide import QtGui
from shiboken import wrapInstance
import maya.cmds as cmds
import maya.OpenMayaUI as omui
import pymel.core as pm
import maya.cmds as cmds

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), QtGui.QWidget)

class TestTool(QtGui.QDialog):


 def __init__(self, parent=maya_main_window()):
      super(TestTool, self).__init__(parent)
      self.qtSignal = QtCore.Signal()
      #################################################################
 def create(self):
     '''
      Set up the UI prior to display
      '''
      self.setWindowTitle("Test")
      self.setWindowFlags(QtCore.Qt.Tool)
      #self.resize(400, 250) # re-size the window
     self.setGeometry(650, 200, 600, 300)
      self.setFixedHeight(580)
      self.setFixedWidth(300)

      QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))




if __name__ == "__main__":
     try:
          ui.deleteLater()
     except:
          pass
     ui = TestTool()
     try:
          ui.create()
          ui.show()
     except:
          ui.deleteLater()
          traceback.print_exc()

您可以使用的一个选项是
QWidget.saveGeometry()
QWidget.restoregometry()
。使用此功能,您可以在工具关闭时保存窗口的位置和大小,然后在初始化时将其还原

通常情况下,对于这样保存工具状态的东西,我将使用
QtCore.QSettings
将数据存储到某个ini文件中。这样,即使关闭Maya或运行多个会话,它也会恢复到上一个状态

下面是一个例子:

import traceback
from PySide import QtCore
from PySide import QtGui
from shiboken import wrapInstance
import maya.cmds as cmds
import maya.OpenMayaUI as omui
import pymel.core as pm
import maya.cmds as cmds
import os

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), QtGui.QWidget)

class TestTool(QtGui.QDialog):

    def __init__(self, parent=maya_main_window()):
        super(TestTool, self).__init__(parent)
        self.qtSignal = QtCore.Signal()

        # Using an env variable makes the path more generic, but use whatever you want
        self.settings_path = os.path.join(os.getenv('HOME'), "settingsFile.ini")

        #################################################################

    def create(self):
        '''
        Set up the UI prior to display
        '''
        self.setWindowTitle("Test")
        self.setWindowFlags(QtCore.Qt.Tool)
        self.resize(400, 250) # re-size the window
        self.setGeometry(650, 200, 600, 300)
        self.setFixedHeight(580)
        self.setFixedWidth(300)

        QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))

        # Restore window's previous geometry from file
        if os.path.exists(self.settings_path):
            settings_obj = QtCore.QSettings(self.settings_path, QtCore.QSettings.IniFormat)
            self.restoreGeometry(settings_obj.value("windowGeometry"))

    def closeEvent(self, event):
        # Save window's geometry
        settings_obj = QtCore.QSettings(self.settings_path, QtCore.QSettings.IniFormat)
        settings_obj.setValue("windowGeometry", self.saveGeometry())

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

    ui = TestTool()

    try:
        ui.create()
        ui.show()
    except:
        ui.deleteLater()
        traceback.print_exc()
由于将大小设置为固定,因此这只会影响位置。希望有帮助