PyGObject GTK + 3 – Documentación?

PyGObject parece no tener documentación real. Este tutorial es lo más cercano que se puede conseguir. He estado luchando toda la mañana simplemente tratando de encontrar una descripción de los argumentos aceptados por el constructor Gtk.Window . Parece que no puedo hacer mucha reflexión en Python porque todo en PyGObject se genera dinámicamente.

¡Lo único que quiero es saber qué argumentos puedo transmitir a este constructor! No parece haber un equivalente de este objeto en la documentación de GTK + 3, y leer el código fuente para descubrir los enlaces ha demostrado ser una tarea extremadamente desalentadora. ¿¿Algunas ideas??

Estoy de acuerdo en que este es un gran defecto de PyGObject en su estado actual. Para aquellos de nosotros que hemos estado usando GTK + por un tiempo, no hay problema, pero para los nuevos usuarios puede ser confuso.

La gente está trabajando en un sistema para generar automáticamente los documentos para otros idiomas distintos de C, lo que se conoce como GObject Introspection Doctools . Ya que todavía no está listo, su mejor opción es utilizar la documentación de la API C y aprender cómo se traduce a Python. No es tan difícil como parece.

Recuerde, las llamadas de Python se envuelven dinámicamente a la biblioteca C subyacente. Todo lo que necesita hacer es aprender cómo se traducen algunas cosas a Python y entender cómo funcionan las “propiedades” de GTK +. Es básicamente una convención de nomenclatura en C y los patrones son fáciles de aprender. La página PyGObject / Introspection Porting es un buen comienzo.

Un constructor en Python generalmente se *_new() a la función *_new() en C. PyGObject también le permite pasar cualquier propiedad GTK + que pertenezca a ese widget como argumentos de palabras clave en el constructor. Por lo tanto, tienes muchas opciones al construir widgets en Python.

GtkWindow mencionado la GtkWindow . Si observa la documentación de GtkWindow , la función gtk_window_new() toma un tipo de ventana como argumento en C. Esto sería un argumento posicional para el constructor en Python. PyGObject “anula” el constructor para que el type sea ​​opcional y se establezca por defecto en una ventana de nivel superior. Hay un montón de propiedades de GtkWindow que también podrían pasarse al constructor como argumentos de palabras clave.

Aquí hay 3 ejemplos de Gtk.Window construir un Gtk.Window en Python que son funcionalmente equivalentes:

 # this is very close to how it's done in C using get_*/set_* accessors. window = Gtk.Window(Gtk.WindowType.TOPLEVEL) window.set_title("Hello") # setting properties as keyword arguments to the constructor window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL, title="Hello") # set_properties() can be used to set properties after construction window = Gtk.Window() window.set_properties(title="Hello") 

La consola interactiva de Python puede ser una excelente manera de experimentar con widgets y propiedades.

Los documentos se encuentran aquí: https://lazka.github.io/pgi-docs/Gtk-3.0/index.html

Los argumentos de Gtk.Window (exactamente lo que ha solicitado) aquí: https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Window.html

Algunas soluciones de consola interactiva existen anteriormente, pero prefiero la auto-completada: ¿Cómo agrego la terminación de tabs al shell de Python?

Expandir un poco a la respuesta aceptada; La página de herramientas de introspección de GObject tiene una sección sobre cómo crear su propia documentación.

En Ubuntu 12.04.2 LTS puede emitir los siguientes comandos:

 $> g-ir-doc-tool --language Python -o ./output_dir /usr/share/gir-1.0/Gtk-3.0.gir $> yelp ./output_dir/index.page 

Puedes recuperar todas las propiedades de un objeto con esto

 dir(YouObjectInstance.props) 

YourObjectInstance es cualquier instancia que crees, por supuesto.

La forma más fácil podría ser abrir un terminal:

 you@yourcomputer ~/Desktop/python $ python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from gi.repository import Gtk, GtkSource, GObject >>> window_instance = Gtk.Window() >>> dir(window_instance.props) ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'accept_focus', 'app_paintable', 'application', 'border_width', 'can_default', 'can_focus', 'child', 'composite_child', 'decorated', 'default_height', 'default_width', 'deletable', 'destroy_with_parent', 'double_buffered', 'events', 'expand', 'focus_on_map', 'focus_visible', 'gravity', 'halign', 'has_default', 'has_focus', 'has_resize_grip', 'has_tooltip', 'has_toplevel_focus', 'height_request', 'hexpand', 'hexpand_set', 'icon', 'icon_name', 'is_active', 'is_focus', 'margin', 'margin_bottom', 'margin_left', 'margin_right', 'margin_top', 'mnemonics_visible', 'modal', 'name', 'no_show_all', 'opacity', 'parent', 'receives_default', 'resizable', 'resize_grip_visible', 'resize_mode', 'role', 'screen', 'sensitive', 'skip_pager_hint', 'skip_taskbar_hint', 'startup_id', 'style', 'title', 'tooltip_markup', 'tooltip_text', 'transient_for', 'type', 'type_hint', 'ubuntu_no_proxy', 'urgency_hint', 'valign', 'vexpand', 'vexpand_set', 'visible', 'width_request', 'window', 'window_position'] >>> 

Ahora tienes documentación instantánea de las propiedades del objeto.

Si necesitas los métodos?

 for names in dir(window_instance): attr = getattr(window_instance,names) if callable(attr): print names,':',attr.__doc__ 

Si quieres una reflexión, puedes ir a este enlace: reflexión api Eso te ahorrará toneladas de tiempo. También podría ser modificado para aceptar cualquier objeto o ser heredado.

También puede usar: help (SomeClassModuleOrFunction)

Sin embargo, el texto impreso que proviene de help () puede ser limitado, pero el uso de instance.props y loop en la instancia también puede tener inconvenientes dependiendo de qué tan bien documentado esté el código.

Utilice cualquiera de los métodos anteriores para obtener al menos algo de documentación. Cuando uno no se ajusta a lo que necesitas, prueba con otro.

usa IPython

 In [1]: from gi.repository import Gtk In [2]: Gtk.Window()? Type: GObjectMeta String Form: File: /usr/lib/python3/dist-packages/gi/overrides/Gtk.py Docstring:  Constructor information: Definition:Gtk.Window(self, type=, **kwds) 

para más detalles

 In [3]: help(Gtk.Window())