Для приложения, которое можно запускать непосредственно с флеш-памяти / ручки / 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_()