2015-04-26 23 views
23

Ho una GUI incorporata in Glade (3.18) che viene chiamata da un programma Python 3 (usando PyGObject). Ho un sacco di avvertimenti durante l'esecuzione del programma (Fedora 21) che dicono:GtkDialog mappato senza un genitore temporaneo

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

Come posso risolvere questo avvertimento? Ho provato a compilare il campo Transient for: main_window in Glade per tutte le finestre di dialogo, ma gli avvisi appaiono ancora.

risposta

12

Correggi questo avviso dando a GtkDialog un genitore come modale. Le funzioni rilevanti sono gtk_window_set_transient_for() (che imposta questa finestra in modo che sia sempre in primo piano, oppure temporaneo per, un altro) e facoltativamente gtk_window_set_modal() per renderlo una finestra di dialogo modale. Questo è in definitiva ciò che fanno i vari costruttori di GtkDialog.

+0

Ciò significa che è necessario passare l'istanza 'main_window' a ogni classe di finestre di dialogo? Se invece utilizzo 'self.builder.add_objects_from_file (..." main_window ")' nella finestra di dialogo, ricevo errori, perché i segnali 'main_window' non sono collegati (che è ovviamente corretto, perché la finestra di dialogo ha segnali diversi rispetto alla finestra principale). L'impostazione in Glade potrebbe fallire a causa di ragioni simili. L'opzione transitorio è impostata, ma in fase di runtime, la finestra di dialogo non ha accesso all'istanza 'main_window'. – tobias47n9e

+0

C'è qualche ragione per cui non puoi chiamare 'set_transient_for()' quando mostri la finestra di dialogo? Questo è ciò che la parte "mappata" significa – andlabs

+0

Probabilmente ho fatto un errore stupido, ma l'inserimento di una di quelle varianti nella parte sottostante della linea collegata non aiuta con il messaggio di errore: https://github.com/tobias47n9e/innstereo/blob/ master/innstereo/layer_properties.py # L47 – tobias47n9e