8

フラッシュ/ペン/usb/jump/thumb ドライブから直接実行できるアプリの場合、あるマシンから別のマシンに移動する際の移植性のために、ユーザー設定をメモリ スティックの同じディレクトリに保存することは理にかなっています。プログラムは (マシンごとの 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('<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_()

この .ini ファイルは、たまたま Windows で実行しているため作成されたものです: C:\Documents and Settings\All Users\Application Data__MyBiz__settings.ini

SystemScope の代わりに UserScope は役に立ちません。機能しなかった
'.'代わりに、 setPath() は基本的に効果がありません。 これも無駄に試しました:'./__settings.ini'

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


更新: 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('<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_()
4

1 に答える 1

9

そのオーバーロードclass QSettings(fileName, format[, parent=None])を次のように使用できます。

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

パスが相対パスの場合、ファイルは現在の作業ディレクトリで既に開かれていますが、それは望ましくない場合があります。これらの回答
のいずれかを試して、代わりにスクリプトがあるディレクトリを使用できます。

于 2011-11-01T07:42:05.010 に答える