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
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 de las soluciones de consola interactiva existen anteriormente, pero prefiero la auto-completa: ¿Cómo agrego la terminación de pestañas al shell de Python?
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())