# Modify value in \`SlicerLauncherSettings.ini\` from application

**URL:** <https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000>\
**Category:** Development\
**Created:** [April 18, 2022, 1:28pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000 "2022-04-18T13:28:55Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [April 18, 2022, 1:28pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/1 "2022-04-18T13:28:55Z")

</div>

Hi,

Is it possible to set value to `SlicerLauncherSettings.ini` from application?  
For example:

```auto
slicer.app.setEnvironmentVariable("SLICER_HOME", "/my/path")

```

will modify `SLICER_HOME` env var but it doesn’t change the value in `SlicerLauncherSettings.ini`.

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [April 18, 2022, 4:41pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/2 "2022-04-18T16:41:58Z")

</div>

You can access/modify the SlicerLauncherSettings.ini file at multiple levels:

- as any other text file, using standard file read/write functions
- as a Qt settings file (`QSettings settings(fileName, QSettings::IniFormat);`)
- as a CTK launcher settings ini file, using CTKApLauncherLib’s ctkAppLauncherSettings class

---

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [April 19, 2022, 2:24pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/3 "2022-04-19T14:24:49Z")

</div>

Thank you for the response,

First I tried to use `ctkAppLauncherSettings` as it is done in [qSlicerCoreApplication](https://github.com/Slicer/Slicer/blob/cad13ad1f57ffd25f75e3c59c6e32394056b3fad/Base/QTCore/qSlicerCoreApplication.cxx#L255-L261) but then I understood that `ctkAppLauncherSettings` doesn’t privide API to overwrite values in file. To do that I would need to work with settings as with usual textual file.

I decided to use `userSettings` (QSettings class) for now:

```auto
QSettings* settings = app->userSettings();
settings->setValue("MyKey", "FALSE");

```

---

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [April 19, 2022, 2:35pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/4 "2022-04-19T14:35:09Z")

</div>

> [@lassoan](#):
>
> as a Qt settings file ( `QSettings settings(fileName, QSettings::IniFormat);` )

By the way I don’t know should this work or not but it doesn’t:

```python
settings=qt.QSettings(slicer.app.launcherSettingsFilePath, 1) # 1 is QSettings::IniFormat I could not find this enum in python

```

I expected that `settings` retrieves information from `slicer.app.launcherSettingsFilePath` **.ini** file and I could work with it as with QSettings.

But `settings.allKeys()` returns empty list.

And `settings.fileName()` shows  
`'/home/kerim/.config/home/kerim/Documents/Colada/Colada-0.1.0-2022-04-17-linux-amd64/bin/ColadaLauncherSettings.ini/1.conf'`

While `slicer.app.launcherSettingsFilePath` returns  
`'/home/kerim/Documents/Colada/Colada-0.1.0-2022-04-17-linux-amd64/bin/../bin/ColadaLauncherSettings.ini'`

As you can see `settings.fileName()` adds `/1.conf` at the end.  
Am I misunderstanding something?

As I understand there is a constructor [QSettings(const QString & _fileName_ , QSettings::Format _format_ , QObject \* _parent_ = nullptr)](https://doc.qt.io/qt-5/qsettings.html) but it works somehow strange

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [April 25, 2022, 12:49pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/5 "2022-04-25T12:49:34Z")

</div>

It works for me perfectly if I use the proper Qt constant:

```python
>>> settings=qt.QSettings(slicer.app.launcherSettingsFilePath, qt.QSettings.IniFormat)
>>> settings.allKeys()
('Application/arguments', 'Application/name', 'Application/organizationDomain', 'Application/organizationName', 'Application/path', 'Application/revision', 'Environment/additionalPathVariables', 'EnvironmentVariables/ITK_AUTOLOAD_PATH', 'EnvironmentVariables/PIP_REQUIRE_VIRTUALENV', 'EnvironmentVariables/PYTHONHOME', 'EnvironmentVariables/PYTHONNOUSERSITE', ...

```

---

<div class="post-metadata">

**Author:** ![keri](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/keri/32/11618_2.png) [@keri](https://discourse.slicer.org/u/keri)\
**Post date:** [April 25, 2022, 12:56pm UTC](https://discourse.slicer.org/t/modify-value-in-slicerlaunchersettings-ini-from-application/23000/6 "2022-04-25T12:56:17Z")

</div>

Thank you very much!

Your approach works  
I didn’t know that there might be a difference between passing the value `1` and `qt.QSettings.IniFormat`.
