2016-10-12 37 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