2016-10-12 10 views
1

Я работаю в Pyside. Каждый раз, когда я снова открываю окно, он возвращается в середину экрана. Как я могу получить майю или Windows, чтобы запомнить позицию и размер?Maya PySide Window - Запомните положение и размер

Вот некоторые основные код, я работаю с:

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