2016-07-16 20 views
2

Ich kann ein Skript, das ein Fenster aufruft, aber wenn ich versuche, einen Dialog mit den Eltern = Keine zu erhöhen, erhalte ich:pyGtk3 Müssen Dialoge Eltern haben? Wenn ja, wie nennst du sie aus einem Skript?

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

Was für Eltern kann ich auf Karte, dies zu? Es scheint, dass ich es einem Dummy-Elternteil zuordnen kann, aber wird dies dazu führen, dass Dinge brechen und Menschen sterben?


-Code von http://python-gtk-3-tutorial.readthedocs.io/en/latest/dialogs.html#messagedialog, wo es von einem übergeordneten Fenster genannt wird ... aber ich will das Pop-up in der Lage sein, als ich durch ein Terminal-Skript renne.

Edit: Einige Stochern (und auch unten durch eine Antwort geben) ergab, dass unter (statt none) Gtk.Window() als erstes Argument nicht von der Nachricht loszuwerden ...

def on_question(): 
    dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.QUESTION, 
     Gtk.ButtonsType.YES_NO, "This is an QUESTION MessageDialog") 
    dialog.format_secondary_text(
     "And this is the secondary text that explains things.") 
    response = dialog.run() 
    if response == Gtk.ResponseType.YES: 
     print("QUESTION dialog closed by clicking YES button") 
    elif response == Gtk.ResponseType.NO: 
     print("QUESTION dialog closed by clicking NO button") 

    dialog.destroy() 
+0

Mögliches Duplikat von [GtkDialog ohne übergeordnetes Elternteil zugeordnet] (http://stackoverflow.com/questions/29883211/gtkdialog-mapped-without-a-transient-parent) –

+0

Möglich - aber dieser Fragesteller hat ein Fenster zu setze es zum Kind von. Ich nicht. Vielleicht ist es ein Missbrauch der GtkMessagDialog-Klasse - es schien nur viel enger als das Erstellen von Fenstern, die das gleiche tun ... – Trees4theForest

+0

Wenn Sie print(dialog.get_parent()) vor dialog.destroy() setzen, wird eine "None" gedruckt. Keine None, aber die, die du als Eltern weitergegeben hast. Das erste "None" im Konstruktor ist das übergeordnete Element des Dialogs – cox

Antwort

2

Ich werde den obigen Kommentar eine Antwort geben. können Sie haben aw = Gtk.Window() irgendwo in Ihrem Code und übergeben (es kann innerhalb Funktion Körper sein), dass w on_question:

def on_question(parent=None): 
    dialog = Gtk.MessageDialog(parent, 0, Gtk.MessageType.QUESTION, 
     Gtk.ButtonsType.YES_NO, "This is an QUESTION MessageDialog") 
.... 
w = Gtk.Window() 
on_question(w) 

oder

def on_question(): 
    dialog = Gtk.MessageDialog(Gtk.Window(), 0, Gtk.MessageType.QUESTION, 
     Gtk.ButtonsType.YES_NO, "This is an QUESTION MessageDialog") 

die GTK-Nachricht es ist weg, wenn das das einzige Problem ist.

+0

Ich kam gerade hierher, um zu schreiben, dass ich diese Lösung gerade heraus fand jetzt. Es wirft keinen Fehler mehr auf ... Ist das SCHLECHTE PRAXIS? – Trees4theForest

+1

Ich hoffe mein Kommentar hat geholfen. Und nein, wenn du selbst eine Lösung findest, ist das ein Zeichen von Goooood und langer "Übung"! – cox

+0

Ha! Ich denke, ich meinte, verwendet ein Dummy Elternfenster schlechten Code;) – Trees4theForest