Prima di provare a scrivere le mie funzioni del modulo PyQt4 Python ... Volevo chiedere se qualcuno ha una funzione simile da condividere.Python PyQt4 funzioni per salvare e ripristinare i valori del widget UI?
In molti dei miei programmi python in cui ho una GUI creata utilizzando PyQt4 e qtDesigner, utilizzo il metodo QSettings per salvare e ripristinare gli stati dell'interfaccia utente e i valori di tutti i widget durante la chiusura e l'avvio.
Questo esempio mostra come salvare e ripristinare alcuni campi LineEdit, checkBox e radioButton.
Qualcuno ha una funzione che può attraversare l'interfaccia utente e trovare TUTTI i widget/controlli e i loro stati e salvarli (ad esempio guisave()) e un'altra funzione che può ripristinarli (ad esempio guirestore())?
mio CloseEvent simile a questa:
#---------------------------------------------
# close by x OR call to self.close
#---------------------------------------------
def closeEvent(self, event): # user clicked the x or pressed alt-F4...
UI_VERSION = 1 # increment this whenever the UI changes significantly
programname = os.path.basename(__file__)
programbase, ext = os.path.splitext(programname) # extract basename and ext from filename
settings = QtCore.QSettings("company", programbase)
settings.setValue("geometry", self.saveGeometry()) # save window geometry
settings.setValue("state", self.saveState(UI_VERSION)) # save settings (UI_VERSION is a constant you should increment when your UI changes significantly to prevent attempts to restore an invalid state.)
# save ui values, so they can be restored next time
settings.setValue("lineEditUser", self.lineEditUser.text());
settings.setValue("lineEditPass", self.lineEditPass.text());
settings.setValue("checkBoxReplace", self.checkBoxReplace.checkState());
settings.setValue("checkBoxFirst", self.checkBoxFirst.checkState());
settings.setValue("radioButton1", self.radioButton1.isChecked());
sys.exit() # prevents second call
mio MainWindow init simile a questa:
def __init__(self, parent = None):
# initialization of the superclass
super(QtDesignerMainWindow, self).__init__(parent)
# setup the GUI --> function generated by pyuic4
self.setupUi(self)
#---------------------------------------------
# restore gui position and restore fields
#---------------------------------------------
UI_VERSION = 1
settings = QtCore.QSettings("company", programbase) # http://pyqt.sourceforge.net/Docs/PyQt4/pyqt_qsettings.html
self.restoreGeometry(settings.value("geometry"))
self.restoreState(settings.value("state"),UI_VERSION)
self.lineEditUser.setText(str(settings.value("lineEditUser"))) # restore lineEditFile
self.lineEditPass.setText(str(settings.value("lineEditPass"))) # restore lineEditFile
if settings.value("checkBoxReplace") != None:
self.checkBoxReplace.setCheckState(settings.value("checkBoxReplace")) # restore checkbox
if settings.value("checkBoxFirst") != None:
self.checkBoxFirst.setCheckState(settings.value("checkBoxFirst")) # restore checkbox
value = settings.value("radioButton1").toBool()
self.ui.radioButton1.setChecked(value)
Molto poco utile modulo. Grazie! Funziona bene quando si salvano QSettings su un file ini, ad es. 'guisave (self.ui, QtCore.QSettings ('saved.ini', QtCore.QSettings.IniFormat))' che crea un file che può essere condiviso tra gli utenti. – Snorfalorpagus
Ho dovuto modificare un paio di righe in 'value = unicode (settings.value (name) .toString())' come settings.value restituiva un QVariant. – Snorfalorpagus
Raffinati miglioramenti Snorfalorpagus! Mi piace :) – panofish