PyGObject似乎没有真正的文档。 This tutorial尽可能接近。我整个上午一直在努力寻找Gtk.Window
构造函数接受的参数的描述。我似乎无法在Python中做太多反思,因为PyGObject中的所有内容都是动态生成的。
我想要的只是知道我可以传递给这个构造函数的参数!在GTK + 3文档中似乎没有相应的此对象,并且阅读源代码以确定绑定已被证明是一项非常艰巨的任务。任何想法??
答案 0 :(得分:20)
我同意这是PyGObject当前状态的一个巨大缺点。对于我们这些已经使用GTK +一段时间的人来说这没问题,但对于新用户来说,这可能会令人困惑。
人们正在开发一个系统来自动生成C语言以外的语言文档,称为GObject Introspection Doctools。由于尚未准备就绪,最好使用C API documentation并了解它如何转换为Python。它并不像听起来那么难。
请记住,Python调用是动态包装到底层C库的。您需要做的就是了解一些通常翻译成Python的内容,并了解GTK +“属性”的工作原理。它基本上是C中的命名约定,并且模式易于学习。 PyGObject/Introspection Porting页面是个不错的开始。
Python中的构造函数通常包装在C中的*_new()
函数中.PyGObject还允许您将属于该窗口小部件的任何 GTK +属性作为构造函数中的关键字参数传递。因此,在Python中构建小部件时,您有很多选择。
你提到了GtkWindow
。如果查看GtkWindow Documentation,gtk_window_new()
函数将窗口类型作为C中的参数。这将是Python中构造函数的位置参数。 PyGObject“覆盖”构造函数,以便type
是可选的,默认为顶级窗口。还有一堆GtkWindow properties也可以作为关键字参数传递给构造函数。
以下是在Python中构建Gtk.Window
的3个功能等同的例子:
# 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")
Python交互式控制台是试验小部件和属性的好方法。
答案 1 :(得分:14)
文档位于此处: https://lazka.github.io/pgi-docs/Gtk-3.0/index.html
这里的Gtk.Window参数(正是你所要求的): https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Window.html
上面有一些交互式控制台解决方案,但我更喜欢自动完成的解决方案: How do I add tab completion to the Python shell?
答案 2 :(得分:6)
稍微扩展到接受的答案; GObject Introspection Doctools页面有一节介绍如何创建自己的文档。
在Ubuntu 12.04.2 LTS上,您可以发出以下命令:
$> g-ir-doc-tool --language Python -o ./output_dir /usr/share/gir-1.0/Gtk-3.0.gir
$> yelp ./output_dir/index.page
答案 3 :(得分:4)
您可以使用此
检索对象的所有属性dir(YouObjectInstance.props)
YourObjectInstance是您创建的任何实例。
简单的方法可能是打开终端:
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']
>>>
现在您可以立即获得对象属性的文档。
如果您需要这些方法?
for names in dir(window_instance):
attr = getattr(window_instance,names)
if callable(attr):
print names,':',attr.__doc__
如果您想要反思,可以转到此链接:reflection api 这将为您节省大量时间。它也可以被修改为接受任何对象或被继承。
您还可以使用: 帮助(SomeClassModuleOrFunction)强>
来自help()的打印文本可能会受到限制,但在实例上使用instance.props和循环也可能会有缺点,具体取决于代码的记录程度。
使用上述任何方法至少获取一些文档。当一个人不适合你需要的时候尝试另一个。
答案 4 :(得分:3)
使用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)
了解更多详情
In [3]: help(Gtk.Window())