2016-10-12 38 views
1

我正在Pyside工作。每次我重新打开窗口时,它都会弹出回到屏幕中间。我怎样才能让Maya或Windows记住位置和大小?玛雅PySide窗口 - 记住位置和大小

下面是一些基本的代码我一起工作:

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() 

回答

1

一种选择,你可以使用的QWidget.saveGeometry()QWidget.restoreGeometry()。有了这个,您可以在工具关闭时保存窗口的位置和大小,然后在初始化时将其恢复。

通常对于像这样的东西,它保存工具的状态,我将数据存储到一个ini文件的地方QtCore.QSettings。这样,即使您关闭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() 

既然你设置固定的大小,这样只会影响位置。希望能帮助到你!

+0

工作正常!谢谢! – natecomes