сообщение об ошибке при выполнении zenity под 16,04: Gtk-сообщение: GtkDialog отображается без переходного родителя. Этому препятствуют

Под ubuntu 16.04 I получают следующее сообщение

 Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged

когда я открываю zenity с командой

  zenity --text-info --filename=<filename>

Этого не произошло под 14,04. Я предполагаю, что ответ связан с этим сообщением, но сообщение не объясняет, как реализовать предлагаемое решение. Кто-то мог объяснить, к какому файлу я должен добавить предложенные строки?

Вы фиксируете это предупреждение путем предоставления GtkDialog родителя, чтобы быть модальными к. Соответствующие функции являются gtk_window_set_transient_for () (который устанавливает это окно, чтобы всегда быть сверху, или переходный процесс для, другой), и дополнительно gtk_window_set_modal () для создания этого модальным диалоговым окном. Это в конечном счете, что делают различные конструкторы GtkDialog.

19
задан 23 May 2017 в 05:39

4 ответа

Игнорируют его.

Это предупреждение , не ошибка. Работы приложения, это просто не кодируется с лучшими практиками в памяти, как это кажется. Необходимо ли было бы изменить zenity исходный код, чтобы реализовать фиксацию, описанную в связанном вопросе и затем скомпилировать его сами, но... это работает так или иначе, итак, почему необходимо обеспокоиться?

, Если Вы просто хотите избавиться от вывода в своем терминале, Вы могли бы просто перенаправить STDERR (поток стандартной погрешности, это - то, где предупреждение печатается к) к /dev/null (виртуальное устройство посимвольного ввода-вывода, которое глотает данные) путем добавления 2> /dev/null в конец команды, как это:

zenity --text-info --filename=<filename> 2> /dev/null
21
ответ дан 23 November 2019 в 02:01

zenity ... 2>/dev/null работы для меня. Единственная проблема, которую я вижу, состоит в том, что другие (важные) ошибочные сообщения будут также подавлены, таким образом, лучше создадут ошибочное получение так или иначе в Вашем коде

2
ответ дан 23 November 2019 в 02:01

Кажется, что Gtk devs решил добавить это предупреждение, которое влияет на многие пакеты. Мы просто должны ожидать Zenity dev, чтобы нагнать и зафиксировать Zenity.

С оболочкой удара (это не Posix-совместимо) относительно просто подавить определенные сообщения об ошибках при разрешении других сообщений до stderr:

zenity --info --text "hello" 2> >(grep -v 'GtkDialog' >&2)

Это не вмешивается в stdout, так, чтобы мог передаваться по каналу или использоваться в замене команды в качестве нормального:

echo message: $(zenity --entry  2> >(grep -v 'GtkDialog' >&2) )
3
ответ дан 23 November 2019 в 02:01

Основываясь на ответе Дэйва Роува , если у вас много запросов, вы можете очистить это, создав функцию, такую ​​как

function zenityNoWarn() {
    zenity "$@" 2> >(grep -v 'GtkDialog' >&2)
}

, а затем использовать ее следующим образом:

zenityNoWarn --question --text "Are you sure?"

Это упрощает чтение в сочетании с другой логикой:

if [[ `zenityNoWarn --question --text "Are you sure?"; echo $?` -eq 0 ]]; then
    echo "Yes!"
else
    echo "No..."
fi
3
ответ дан 27 November 2019 в 22:56

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

Похожие вопросы: