2011-11-01 28 views
8

フラッシュ/ペン/ usb /ジャンプ/サムドライブから直接実行できるアプリケーションの場合、あるマシンから別のマシンに移動する際の移植性のためには、プログラムが実行されているのと同じディレクトリにあるメモリスティックに格納される設定(Windows/Mac/Linuxユーザまたはマシンごとのシステムディレクトリではなく)。QSettings():現在の作業ディレクトリに保存する方法

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

私は、現時点ではWindows上で実行することが起こるので、この.iniファイルが作成されます。C :\ Documents and Settings \ All Users \ Application Data__MyBiz__settings.ini

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

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

参考:私はPySideに適応する方法を知りませんがhttps://doc.qt.io/archives/qt-4.8/qsettings.html http://www.pyside.org/docs/pyside/PySide/QtCore/QSettings.html

は有望:
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_() 

答えて

8

あなたはこのようにその過負荷class QSettings(fileName, format[, parent=None])を使用することができますパスは相対的である

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

場合は、ファイルがすでに現在の作業ディレクトリで開かれますが、それはあなたが望むものではないかもしれません。
these answersのいずれかを試して、代わりにスクリプトがあるディレクトリを使用することができます。

+0

これは機能します、ありがとうございます。 – gseattle

関連する問題