Unter Ubuntu 16.04 erhalte ich folgende Meldung
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
wenn ich zenity mit dem befehl öffne
zenity --text-info --filename=<filename>
Dies geschah nicht unter 14.04. Ich gehe davon aus, dass sich die Antwort auf diesen Beitrag bezieht, aber der Beitrag erklärt nicht, wie die vorgeschlagene Lösung umgesetzt werden soll. Könnte jemand erklären, zu welcher Datei ich die vorgeschlagenen Zeilen hinzufügen soll?
Sie beheben diese Warnung, indem Sie dem GtkDialog ein übergeordnetes Element zuweisen, für das Modalität besteht. Die relevanten Funktionen sind gtk_window_set_transient_for () (wodurch dieses Fenster immer über oder vorübergehend für ein anderes Fenster angezeigt wird) und optional gtk_window_set_modal (), um es zu einem modalen Dialogfeld zu machen. Dies ist letztendlich die Aufgabe der verschiedenen GtkDialog-Konstruktoren.
zenity --help-general
Es gibt,--attach=WINDOW Set the parent window to attach to
aber ich bin nicht sicher, wie man es benutzt (was ist Windows?), vielleicht wird es Ihr Problem lösen.WINDOW_ID=$(xprop -name
echo $ TITLE` | wiederherstellen grep WM_CLIENT_LEADER | schneiden Sie -d "#" -f2 | cut -c2-20) `und ich habe dann versucht,zenity --attach=$WINDOW_ID --text-info --filename=<filename>
aber leider habe ich immer noch die Warnung. Schade, aber eines Tages kann es nützlich sein, zu wissen, wie man die Fenster-ID erhält!NULL
. Ich konnte jedoch nichtmake install
lokal Zenity (ich konnte keine Dokumente oder etwas zum Konfigurieren der Installation finden), so dass ich schließlich aufgab. Muss das dreckige benutzen2>/dev/null
.Antworten:
Ignoriere es.
Es ist eine Warnung , kein Fehler. Die Anwendung funktioniert, es ist nur nicht mit Best Practices im Auge, wie es scheint, codiert. Sie müssten den
zenity
Quellcode ändern , um das in Ihrer verknüpften Frage beschriebene Update zu implementieren, und es dann selbst kompilieren, aber ... es funktioniert trotzdem. Warum sollten Sie sich also die Mühe machen?Wenn Sie nur die Ausgabe in Ihrem Terminal löschen möchten, können Sie STDERR (Standardfehlerstrom, an den die Warnung gedruckt wird) einfach an
/dev/null
(virtuelles Zeichengerät, das Daten verschluckt) umleiten, indem Sie2> /dev/null
an das Ende des Befehls anhängen. so was:quelle
2> /dev/null
hat die Warnung aus irgendeinem Grund nicht den gewünschten Effekt. Ich weiß, es ist nur ein Ärgernis, aber ich würde gerne in der Lage sein, solche Warnungen zu unterdrücken.Es scheint, dass die Gtk-Entwickler beschlossen haben, diese Warnung hinzuzufügen, die eine Reihe von Paketen betrifft. Wir müssen nur darauf warten, dass der Zenity-Entwickler Zenity einholt und repariert.
Mit der Bash- Shell (dies ist nicht Posix-konform) ist es relativ einfach, bestimmte Fehlermeldungen zu unterdrücken, während andere Nachrichten an stderr durchgelassen werden:
Dies beeinträchtigt stdout nicht, so dass es wie gewohnt weitergeleitet oder bei der Befehlsersetzung verwendet werden kann:
quelle
zenity ... 2>/dev/null
funktioniert bei mir. Das einzige Problem, das ich sehe, ist, dass andere (wichtige) Fehlermeldungen ebenfalls unterdrückt werden, um die Fehlererfassung in Ihrem Code irgendwie besser zu erstellenquelle
Aufbauend auf der Antwort von Dave Rove können Sie bei vielen Eingabeaufforderungen das Problem beheben, indem Sie eine Funktion wie erstellen
dann benutze es so:
Dies erleichtert die Lesbarkeit in Kombination mit anderer Logik:
quelle