PySide Window - Remember position and size

PySide Window - Remember position and size

Anonymous
Not applicable
4,040 Views
3 Replies
Message 1 of 4

PySide Window - Remember position and size

Anonymous
Not applicable

I am working in Pyside.  Every time I re-open the window it pops back to the middle of the screen.  How can I get either Maya or Windows to remember the position and size?

 

Here is some basic code I am working with:

 

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

0 Likes
Accepted solutions (1)
4,041 Views
3 Replies
Replies (3)
Message 2 of 4

Anonymous
Not applicable
Accepted solution

Either use Maya option vars to store the info or better, use QSettings to store QPoint and QSize objects themselves.

Message 3 of 4

Anonymous
Not applicable

Here is the solution.

 

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()
Message 4 of 4

will
Community Visitor
Community Visitor

This helped a lot thanks! Is it possible to save which tab was active last in that setting.ini file?

0 Likes