QSettings (): cómo guardar en el directorio de trabajo actual

Para una aplicación que puede ejecutarse directamente desde una unidad flash / pen / usb / jump / thumb, para la portabilidad al pasar de una máquina a otra, puede tener sentido que las configuraciones del usuario se almacenen en la tarjeta de memoria en el mismo directorio que el el progtwig se ejecuta desde (en lugar de los usuarios de Windows / Mac / Linux o los directorios del sistema por máquina).

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

Aquí hay un pequeño progtwig de ejemplo que mantiene su posición de pantalla de ejecución a ejecución utilizando 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('[QTextEdit area]

Allo Woyld') 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_()

Este archivo .ini se crea ya que estoy ejecutando Windows en este momento: 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 tuvo efecto.
También probé esto 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

Aunque prometedor, no sé cómo adaptarme 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('[QTextEdit area]

Allo Woyld') 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_()

Puede usar esa class QSettings(fileName, format[, parent=None]) sobrecarga class QSettings(fileName, format[, parent=None]) esta manera:

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

Si la ruta es relativa, el archivo ya se abrirá en el directorio de trabajo actual, pero puede que no sea lo que desea.
Puede probar una de estas respuestas para usar el directorio donde se encuentra el script.