QSettings (): Как сохранить в текущий рабочий каталог

Для приложения, которое можно запускать непосредственно с флеш-памяти / ручки / USB / Jump / thumb drive, для переносимости при переходе с одного компьютера на другой может иметь смысл хранить пользовательские настройки на карте памяти в том же каталоге, из которого запускается программа (а не пользователь Windows / Mac / Linux или системные каталоги). на машину).

QSettings () удобен, однако можно ли указать ему использовать текущий рабочий каталог?

Вот небольшой пример программы, которая сохраняет свое положение на экране от запуска до запуска с помощью 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_()

Этот .ini файл создается, так как я сейчас работаю в Windows: C: \ Documents and Settings \ All Users \ Application Data__MyBiz__settings.ini .

UserScope вместо SystemScope не помогает.
'.' вместо './__ settings.ini' не работали, setPath () практически не действует.
Тоже безрезультатно:

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

Ссылка: https://doc.qt.io/archives/qt-4.8/qsettings.html http: // www .pyside.org / docs / pyside / PySide / QtCore / QSettings.html

Многообещающе, хотя я не знаю, как адаптироваться к PySide:
http://www.qtcentre.org/archive/index.php /t-35287.html


Update: ответ от alexisdm работает, поэтому вот обновленный код:

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_()

8
задан ekhumoro 14 December 2017 в 19:53
поделиться