2016-10-12 45 views
1

私はPysideで働いています。ウィンドウを再オープンするたびに、画面の中央にポップアップします。位置とサイズを覚えておくにはどうすればよいですか?ここでMaya 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

1つのオプションはQWidget.saveGeometry()QWidget.restoreGeometry()です。これにより、ツールが終了したときにウィンドウの位置とサイズを保存し、初期化時にウィンドウを元に戻すことができます。

通常、ツールの状態を保存するこのようなものについては、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() 

あなたが固定されるサイズを設定しているので、これが唯一の位置に影響します。それが役に立てば幸い!

+0

それがうまくいった!ありがとう! – natecomes

関連する問題