Изменения через 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 сделают все это за вас.