2016-10-12 11 views
1

저는 Pyside에서 일하고 있습니다. 창을 다시 열 때마다 화면 중앙으로 다시 나타납니다. Maya 나 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()입니다 : 여기

내가 함께 일하고 몇 가지 기본적인 코드입니다. 이렇게하면 도구가 닫힐 때 창 위치와 크기를 저장 한 다음 초기화 할 때 다시 복원 할 수 있습니다.

일반적으로 도구의 상태를 저장하는 곳의 물건에 대해서는 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