Flags & Enums#

Flags are subclasses of GObject.GFlags, which in turn is a subclass of the standard library enum.IntFlag. They represent bit fields where some bits also have names:

>>> Gtk.DialogFlags.MODAL
<DialogFlags.MODAL: 1>
>>> Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT
<DialogFlags.MODAL|DESTROY_WITH_PARENT: 3>
>>> int(_)
3
>>> Gtk.DialogFlags(3)
<DialogFlags.MODAL|DESTROY_WITH_PARENT: 3>
>>> isinstance(Gtk.DialogFlags.MODAL, Gtk.DialogFlags)
True
>>>

Bitwise operations on them will produce a value of the same type.

Enums are subclasses of GObject.GEnum, which in turn is a subclass of the standard library enum.IntEnum. They represent a list of named constants:

>>> Gtk.Align.CENTER
<Align.CENTER: 3>
>>> int(Gtk.Align.CENTER)
3
>>> int(Gtk.Align.END)
2
>>> Gtk.Align(1)
<Align.START: 1>
>>> isinstance(Gtk.Align.CENTER, Gtk.Align)
True

Creating New Enums and Flags#

New enumerations and flags types can be defined by subclassing GObject.GEnum or GObject.GFlags in the same way as standard library enumerations. A new GType is registered automatically.

>>> from gi.repository import GObject
>>> class E(GObject.GEnum):
...     ONE = 1
...     TWO = 2
...
>>> E.ONE
<E.ONE: 1>
>>> E.ONE.value_name
'ONE'
>>> E.ONE.value_nick
'one'
>>> E.__gtype__
<GType __main__+E (1014834640)>
>>> E.__gtype__.name
'__main__+E'

The GType name can be set explicitly by providing a __gtype_name__ attribute:

>>> from gi.repository import GObject
>>> class MyEnum(GObject.GEnum):
...     __gtype_name__ = "MyEnum"
...     ONE = 1
...
>>> MyEnum.__gtype__
<GType MyEnum (767309744)>