Изменения через Gio.Настройки не вступают в силу

Как следует из названия, я пытаюсь изменить настройки через модуль Gio для Python в Ubuntu 16.04 LTS (пользователь сайта Unix & Linux сказал, что скрипт ниже работает на Arch, поэтому это может быть проблема, специфичная для Ubuntu)

Настройки меняются, но не применяются. Вот что я имею в виду.

Рассмотрим сценарий ниже:

$> cat ~/py_bg.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gio
import os
import sys
pic_name = sys.argv[1]
settings = Gio.Settings.new("org.gnome.desktop.background")
settings.set_string("picture-uri", "file://" + os.getcwd() + "/" + pic_name)
settings.apply()

Выполнение сценария действительно показывает изменения в gsettings, но рабочий стол на самом деле остается неизменным

$> python ~/py_bg.py ZEN.jpg                                                    
$> gsettings get org.gnome.desktop.background picture-uri                       
'file:///home/xieerqi/WALLPAPERS/ZEN.jpg'

Проблема сохраняется с другими схемами. Как я могу устранить это и заставить скрипт работать?

1 ответ

Я думаю, что могу предоставить некоторые подробности по этому поводу.

Я оказался здесь после многих часов безуспешных попыток сохранения данных в моей схеме.

Я использую библиотеки С++ libgtkmm-3.0 libglibmm-2.4.

Короче говоря, import Gio,Gtkделает довольно много вещей под капотом.

Функции библиотеки Gio работали, но немного жаловались, прежде чем я запустил приложение Gtk. Я думаю, что это то, где вы были до импорта Gtk.

У меня все еще были проблемы с получением кода Gio, не жалующегося. Решение заключалось в создании объекта Gtk::Application.

В моем коде это было

      auto app = Gtk::Application::create(...);

Теперь они перестали жаловаться.

Объект GSettings не будет сохраняться. Несмотря на то, что моя тщательно созданная схема скомпилирована, и скомпилированная схема была расположена во всех местах, которые я считал важными. gsettings --schema-pathзапросы дали все правильные отзывы.

Что, наконец, сработало, так это то, что если я действительно запустил Gtk::Application. Когда я увидел ваш комментарий о import GtkЯ подозревал, что импорт сделал больше, чем #include<gtkmm>сделал для меня

      app->run();

Это заставило настройки сохраниться.

Мне также пришлось изменить переменную среды GSETTINGS_SCHEMA_DIRв XDGварианты у меня вообще не работали.

Я полагаю, что imports Gio и Gtk сделают все это за вас.

Другие вопросы по тегам