2011-11-01 24 views
8

Para una aplicación que se puede ejecutar directamente desde una unidad flash/pen/usb/jump/thumb, para la portabilidad al pasar de una máquina a otra puede tener sentido para el usuario configuraciones que se almacenarán en la tarjeta de memoria en el mismo directorio desde el que se está ejecutando el programa (en lugar del usuario de Windows/Mac/Linux o los directorios del sistema por máquina).QSettings(): Cómo guardar en el directorio de trabajo actual

QSettings() es útil, sin embargo, ¿se le puede decir que use el directorio de trabajo actual?

aquí hay un pequeño programa de ejemplo que mantiene su posición de la pantalla de una ejecución a utilizar QSettings():

from PySide import QtGui, QtCore 
from PySide.QtGui import QTabWidget, QApplication 
from PySide.QtCore import QSettings 

class AbcApp(QTabWidget): 
    def __init__(self): 
     super(AbcApp, self).__init__() 

     self.settings = QSettings(QSettings.IniFormat,QSettings.SystemScope, '__MyBiz', '__settings') 
     self.settings.setFallbacksEnabled(False) # File only, not registry or or. 

     # setPath() to try to save to current working directory 
     self.settings.setPath(QSettings.IniFormat,QSettings.SystemScope, './__settings.ini') 

     # Initial window size/pos last saved 
     self.resize(self.settings.value("size", QtCore.QSize(270, 225))) 
     self.move(self.settings.value("pos", QtCore.QPoint(50, 50))) 

     self.tab = QtGui.QWidget() 
     self.textEdit = QtGui.QTextEdit(self.tab) 
     self.textEdit.setHtml('<font color=grey>[QTextEdit area]</font><p><center><font color=blue size=4><b>Allo Woyld</b></font></center>') 
     self.addTab(self.tab, 'tab1') 

    def closeEvent(self, e): 
     # Write window size and position to config file 
     self.settings.setValue("size", self.size()) 
     self.settings.setValue("pos", self.pos()) 

     e.accept() 

if __name__ == '__main__': 
    app = QApplication('') 
    frame = AbcApp() 
    frame.show() 
    app.exec_() 

Se crea este archivo .ini desde que ocurre estar corriendo en Windows en la actualidad C : \ Documents and Settings \ All Users \ Application Data__MyBiz__settings.ini.

UserScope en lugar de SystemScope no ayuda.
'.' en lugar de './__settings.ini' no funcionó, setPath() básicamente no tiene efecto.
También probamos este fue en vano:

filepath = os.getcwd() + '/__settings.ini' 
self.settings.setPath(QSettings.IniFormat,QSettings.SystemScope, filepath) 

Referencia: https://doc.qt.io/archives/qt-4.8/qsettings.html http://www.pyside.org/docs/pyside/PySide/QtCore/QSettings.html

prometedor, aunque no sé cómo adaptarse a PySide:
http://www.qtcentre.org/archive/index.php/t-35287.html


Actualización: La respuesta de alexisdm funciona, así que aquí está el código actualizado ahora:

from PySide import QtGui, QtCore 
from PySide.QtGui import QTabWidget, QApplication 
from PySide.QtCore import QSettings 

class AbcApp(QTabWidget): 
    def __init__(self): 
     super(AbcApp, self).__init__() 

     self.settings = QSettings('settings.ini', QSettings.IniFormat) 
     self.settings.setFallbacksEnabled(False) # File only, no fallback to registry or or. 

     # Initial window size/pos last saved if available 
     self.resize(self.settings.value('size', QtCore.QSize(270, 225))) 
     self.move(self.settings.value('pos', QtCore.QPoint(50, 50))) 

     self.tab = QtGui.QWidget() 
     self.textEdit = QtGui.QTextEdit(self.tab) 
     self.textEdit.setHtml('<font color=grey>[QTextEdit area]</font><p><center><font color=blue size=4><b>Allo Woyld</b></font></center>') 
     self.addTab(self.tab, 'tab1') 

    def closeEvent(self, e): 
     self.settings.setValue('size', self.size()) 
     self.settings.setValue('pos', self.pos()) 
     e.accept() 

if __name__ == '__main__': 
    app = QApplication('') 
    frame = AbcApp() 
    frame.show() 
    app.exec_() 

Respuesta

8

Puede utilizar class QSettings(fileName, format[, parent=None]) que la sobrecarga de la siguiente manera:

self.settings = QSettings("__settings.ini", QSettings.IniFormat) 

Si la ruta es relativa, ya se puede abrir el archivo en el directorio de trabajo actual, pero que puede no ser lo que quieres.
Puede probar uno de these answers para usar el directorio donde está el script.

+0

Eso funciona, gracias. – gseattle

Cuestiones relacionadas