Warum ist die Notebook-Steuerung nicht zeigt, in meinem Fenster?
Frage
Obwohl ich zu Python nicht neu bin, dies ist mein erster Versuch an Glade mit der Schnittstelle zu entwerfen. Meine Python-Datei sieht wie folgt aus:
import gobject
import gtk
import gtk.glade
class prefs_dialog:
def __init__ (self):
# Initialize the dialog
self.window = gtk.glade.XML("file.glade").get_widget("prefs_dialog")
self.window.show()
pd = prefs_dialog()
gtk.main()
Und die "file.glade" Datei sieht wie folgt aus:
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkDialog" id="prefs_dialog">
<property name="border_width">5</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<widget class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">page 1</property>
</widget>
<packing>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">page 2</property>
</widget>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">page 3</property>
</widget>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
<property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area">
<property name="visible">True</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
Wenn ich die Anwendung ausführen, bekomme ich ein wirklich winziges Fenster und die Meldung:
python prefs_dialog.py prefs_dialog.py:11: GtkWarning: gtk_notebook_set_tab_label: assertion `GTK_IS_WI DGET (child)' failed self.window = gtk.glade.XML("file.glade").get_widget("prefs_dialog")
Auch dann, wenn die Steuerung nicht an.
Lösung
Okay, so scheint es, wie das Problem ist, dass die Notebook Kontrolle in den Registerkarten keine Widgets hatte. Hinzufügen etwas veranlasste die Steuerung schließlich zeigen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow