2017-09-09 1 views
0

Ich versuchte, einen Grund GTK Container-Widget mit dem folgenden Code zu erstellen:Python Gtk3 die Erstellung von einfachem Containerobjekt mit Gtk.Container

from Gtk3Modules import * 
from gi.repository.GObject import GObject 

class Ex(Gtk.Container): 
    pass 


btn = Gtk.Button("nss") 

ab = Ex() 
ab.add(btn) 


w = Gtk.Window() 
w.add(ab) 
w.show_all() 

, wenn ich dieses Skript starten, erhalte ich die folgenden fatalen Fehler:

(example.py:2642): Gtk-WARNING **: GtkContainerClass::add not implemented for '__main__+Ex' 
** 
Gtk:ERROR:gtkwidget.c:12365:gtk_widget_real_realize: assertion failed: (!_gtk_widget_get_has_window (widget)) 
rlwrap: warning: python3 crashed, killed by SIGABRT (core dumped). 
rlwrap itself has not crashed, but for transparency, 
it will now kill itself with the same signal 


warnings can be silenced by the --no-warnings (-n) option 
Aborted (core dumped) 

Antwort

1

Gtk.Container ist kein Widget, es ist eine Schnittstelle, die Sie implementieren müssen. Es ist unwahrscheinlich, dass Sie das tatsächlich tun möchten, da die Implementierung eines neuen Containers nicht trivial ist.

Was Sie verwenden möchten, ist wahrscheinlich Gtk.Box, wenn Sie möchten, dass es mehrere Kinder oder Gtk.Bin enthalten, wenn Sie nur ein einziges Kind wollen.

+0

ist 'Gtk.Bin' das rudimentärste Objekt zum Hinzufügen eines einzelnen Kindes? Warum hast du 'Gtk.EventBox' nicht vorgeschlagen, weil es zum Hinzufügen eines einzelnen Kindes anstelle von' Gtk.Bin' verwendet werden kann, danke – Nomad

+0

'Gtk.EventBox' ist eine Unterklasse von' Gtk.Bin' mit einigen zusätzlichen Funktionen. Upstream schlägt 'Gtk.Bin' vor: https://wiki.gnome.org/HowDoI/CustomWidgets – TingPing

Verwandte Themen