回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>对于可以直接从flash/pen/usb/jump/thumb驱动器运行的应用程序,为了在从一台计算机移动到另一台计算机时的可移植性,用户设置存储在运行程序的同一目录(而不是每台计算机的Windows/Mac/Linux用户或系统目录)中的记忆棒上是有意义的。</p>
<p>QSettings()很方便,但是可以告诉它使用当前的工作目录吗?</p>
<p>下面是一个小示例程序,它使用QSettings()将屏幕位置从一个运行到另一个运行:</p>
<pre><code>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_()
</code></pre>
<p>这个.ini文件是因为我现在正好在Windows上运行:<em>C:\文档和设置\所有用户\应用程序数据\ MyBiz\u Settings.ini</em>。</p>
<p>UserScope而不是SystemScope没有帮助。<br/>
<code>'.'</code>而不是<code>'./__settings.ini'</code>不起作用,setPath()基本上不起作用。<br/>
也曾尝试过,但没有成功:</p>
<pre><code>filepath = os.getcwd() + '/__settings.ini'
self.settings.setPath(QSettings.IniFormat,QSettings.SystemScope, filepath)
</code></pre>
<p>引用:<a href="https://doc.qt.io/archives/qt-4.8/qsettings.html" rel="nofollow noreferrer">https://doc.qt.io/archives/qt-4.8/qsettings.html</a>
<a href="http://www.pyside.org/docs/pyside/PySide/QtCore/QSettings.html" rel="nofollow noreferrer">http://www.pyside.org/docs/pyside/PySide/QtCore/QSettings.html</a></p>
<p>虽然我不知道如何适应PySide,但我还是很有希望:<br/>
<a href="http://www.qtcentre.org/archive/index.php/t-35287.html" rel="nofollow noreferrer">http://www.qtcentre.org/archive/index.php/t-35287.html</a></p>
<hr/>
<p>更新:来自alexisdm的答案起作用了,下面是更新后的代码:</p>
<pre><code>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_()
</code></pre>