在尝试编写自己的Python PyQt4模块函数之前。。。我想问问有没有人可以分享这样的功能。
在许多python程序中,我使用PyQt4和qtDesigner构建了一个GUI,在关闭和启动期间,我使用QSettings方法保存和恢复所有小部件的UI状态和值。
此示例显示如何保存和还原某些lineEdit、checkBox和radioButton字段。
是否有一个函数可以遍历UI并找到所有小部件/控件及其状态并保存它们(例如g UI save())和另一个函数可以还原它们(例如g UI restore())?
我的closeEvent看起来像这样:
#---------------------------------------------
# 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
我的主窗口初始化看起来像这样:
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)
谢谢Panofish和大家 我正在为QSlider/QSpinBox添加一些更新。 它又小又简单。
在guisave,您可以添加:
在guirestore,您可以添加:
这是帕诺菲什先生最初分享的最新片段。这些伟大的函数是相同的,但是现在可以在PyQt和Python的never版本上使用,如果需要的话可以做一些小的更改。帕诺菲什先生,开源万岁!:)
更改:
SetCheckState()用SetChecked()替换,以避免三态
好吧,我写了一个有两个函数的模块来完成我的要求。 一旦我弄明白了,其实并没有那么复杂,但是当您创建新的pyqt gui程序时,如果您想在会话之间保存widget字段值,它确实节省了很多时间。 我目前只对lineEdit、checkBox和combobox字段进行了编码。如果其他人想添加或改进(如单选按钮等)。。。我相信其他人,包括我自己,会很感激的。
相关问题 更多 >
编程相关推荐