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_()
Eso funciona, gracias. – gseattle