instalar how python gtk gtk3 pygobject gobject

python - how - pygtk 2018



PyGObject GTK+3-Documentación? (5)

Estoy de acuerdo en que este es un gran defecto del 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 idiomas distintos de C, 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 un 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.

PyGObject parece no tener documentación real. Este tutorial es lo más cercano que puede ser. 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??


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: la API de reflexión que 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.


usar IPython

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

para más detalles

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