2011-11-01 33 views
8

Đối với ứng dụng có thể chạy trực tiếp từ ổ flash/pen/usb/jump/thumb, để di chuyển từ máy này sang máy khác, điều này có thể có ý nghĩa đối với người dùng cài đặt được lưu trữ trên thẻ nhớ trong cùng một thư mục mà chương trình đang được chạy từ (thay vì Windows/Mac/Linux người dùng hoặc thư mục hệ thống trên mỗi máy).QSettings(): Cách lưu vào thư mục làm việc hiện tại

QSettings() là tiện dụng, tuy nhiên, nó có thể được cho biết để sử dụng thư mục làm việc hiện tại?

Dưới đây là một chương trình ví dụ nhỏ mà giữ vị trí màn hình của nó từ chạy chạy sử dụng 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_() 

tập tin .ini này được tạo ra kể từ khi tôi tình cờ được chạy trên Windows tại thời điểm này: C : \ Documents and Settings \ Tất cả người dùng \ Application Data__MyBiz__settings.ini.

UserScope thay vì SystemScope không có tác dụng.
'.' thay vì './__settings.ini' không hoạt động, setPath() cơ bản không có hiệu lực.
Cũng cố gắng này không có kết quả:

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

tham khảo: https://doc.qt.io/archives/qt-4.8/qsettings.html http://www.pyside.org/docs/pyside/PySide/QtCore/QSettings.html

vọng mặc dù tôi không biết làm thế nào để thích ứng với PySide:
http://www.qtcentre.org/archive/index.php/t-35287.html


Cập nhật: Câu trả lời từ alexisdm hoạt động, vì vậy, đây là mã được cập nhật ngay bây giờ:

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

Trả lời

8

Bạn có thể sử dụng quá tải class QSettings(fileName, format[, parent=None]) như thế này:

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

Nếu đường dẫn là tương đối, các tập tin sẽ tự động được mở trong thư mục làm việc hiện tại, nhưng điều đó có thể không phải những gì bạn muốn.
Bạn có thể thử một trong số these answers để sử dụng thư mục nơi tập lệnh thay thế.

+0

Điều đó có hiệu quả, cảm ơn bạn. – gseattle

Các vấn đề liên quan