Hello,

I have a problem with KConfigSkeleton not writing its configuration to
disk when calling KCoreConfigSkeleton::writeConfig(). The odd thing
about this is that it works when being used together with
KConfigDialog and KConfigDialogManager, in which case the
configuration file is written correctly.

I have attached a small sample illustrating this behavior. When run,
the value that is entered in the configuration widget will be written
to disk. However, the value that is specified in
MyConfigMain.queryClose() is not written.

Is this a bug in PyKDE or am I missing something?

Thanks,

Till
import sys

from PyKDE4.kdecore import *
from PyKDE4.kdeui import *

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from PyQt4 import uic

#
# Configuration storage
#
class MyConfig(KConfigSkeleton):
	_simpleThing = QString()
	_simpleThingDlg = QString()
	__instance = None

	def __init__(self):
		if self.__instance:
			raise self.__instance
		self.__instance = self
		KConfigSkeleton.__init__(self, "configtestrc")
		self.createConfig()
		self.readConfig()

	def createConfig(self):
		# Create entries for the main window
		self.addItemString ("simpleThing",  self._simpleThing,  QString("foo"))
		self.addItemString ("simpleThingDlg",  self._simpleThingDlg,  QString("bar"))

	def simpleThing(self):
		return self._simpleThing
		
	def setSimpleThing(self,  simpleThing):
		self._simpleThing = simpleThing

	def simpleThingDlg(self):
		return self._simpleThingDlg
		
	def setSimpleThingDlg(self,  simpleThingDlg):
		self._simpleThingDlg = simpleThingDlg

#
# Configuration dialog
#
class MyConfigDialog(KConfigDialog):
	def __init__(self, parentWidget, configuration):
		KConfigDialog.__init__(self, parentWidget, "MainSettings", configuration )
		self.setFaceType ( KPageDialog.Plain )
		self.configWidget = QWidget()
		uic.loadUi ( "mycfg.ui", self.configWidget )
		self.addPage ( self.configWidget, "Configuration" )

#
# Main application class
#
class MyConfigMain(KMainWindow):
	def __init__(self):
		KMainWindow.__init__(self)

		# Create configuration
		self.config = MyConfig()

		#
		# BUG?: A value that is accessed from the dialog below is written to the file when changed (desired behavior)
		#
		self.cfgDialog = MyConfigDialog(self, self.config)
		self.cfgDialogManager = KConfigDialogManager(self.cfgDialog, self.config)
		self.cfgDialog.show()
		
		# not necessary, nothing here - but do something
		self.show()

	def queryClose(self):
		#
		# BUG?: This should cause the text to be written to the configuration file, but it does not appear (not desired)
		#
		self.config.setSimpleThingDlg("foobar!")
		self.config.writeConfig()
		return True

#
# Startup Code
#
# Create main window and application info,
# then instantiate main class and jump there
#

appName = "configtest"
catalog = ""
programName = ki18n("Configuration Test")
version = "0.1"
description = ki18n("Configuration Test")
license = KAboutData.License_GPL
copyright = ki18n("(c) 2009 Till Gerken, <[email protected]>")
text = ki18n("none")
homePage = ""
bugEmail = "[email protected]"

aboutData = KAboutData ( appName, catalog, programName, version, description, license, copyright, text, homePage, bugEmail )

KCmdLineArgs.init ( sys.argv, aboutData )
app = KApplication()

docmgr = MyConfigMain()

sys.exit(app.exec_())

Attachment: mycfg.ui
Description: application/designer

_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to