Подтвердить что ты не робот

PyGObject GTK + 3 - Документация?

PyGObject не имеет реальной документации. Этот учебник находится как можно ближе. Я изо всех сил пытаюсь найти описание аргументов, принятых конструктором Gtk.Window. Кажется, я не могу много размышлять в Python, потому что все в PyGObject динамически генерируется.

Все, что я хочу, это знать, какие аргументы я могу передать этому конструктору! Кажется, что не эквивалент этого объекта в документации GTK + 3, и чтение исходного кода для определения привязок оказалось чрезвычайно сложной задачей. Любые идеи?

4b9b3361

Ответ 1

Я согласен, что это огромный недостаток PyGObject в текущем состоянии. Для тех из нас, кто пользуется GTK +, это не проблема, но для новых пользователей это может запутать.

Люди работают над системой, которая автоматически генерирует документы для языков, отличных от C, которые известны как GObject Introspection Doctools. Поскольку это еще не совсем готово, сделайте все возможное, чтобы использовать API API API и узнайте, как это переводится на Python. Это не так сложно, как кажется.

Помните, что вызовы Python динамически завертываются в базовую библиотеку C. Все, что вам нужно сделать, это узнать, как несколько вещей обычно переводятся на Python и понимают, как работают свойства GTK+. Это в основном соглашение об именах в C, и шаблоны просты в освоении. Страница PyGObject/Introspection Porting - хорошее начало.

Конструктор в Python обычно привязывается к функции *_new() в C. PyGObject также позволяет передать в любое свойство GTK +, принадлежащее этому виджетам, как аргументы ключевого слова в конструкторе. Таким образом, у вас есть много вариантов при создании виджетов в Python.

Вы упомянули GtkWindow. Если вы посмотрите Документацию GtkWindow, функция gtk_window_new() принимает тип окна в качестве аргумента в C. Это будет позиционным аргументом для конструктора в Python. PyGObject "переопределяет" конструктор так, что type является необязательным и по умолчанию используется окно верхнего уровня. Есть куча свойств GtkWindow, которые также могут быть переданы конструктору в качестве аргументов ключевого слова.

Вот 3 примера построения Gtk.Window в Python, которые функционально эквивалентны:

# this is very close to how it 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 может быть отличным способом экспериментировать с виджетами и свойствами.

Ответ 2

Документы расположены здесь: 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

Некоторые интерактивные консольные решения существуют выше, но я предпочитаю автозаполнение: Как добавить завершение табуляции в оболочку Python?

Ответ 3

Чтобы немного расширить принятый ответ; на странице 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

Ответ 4

Вы можете получить все свойства объекта с помощью этого

dir(YouObjectInstance.props)

YourObjectInstance - это любой экземпляр, который вы создаете, конечно.

Простым способом может быть открытие терминала:

[email protected] ~/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__

Если вы хотите отражения, вы можете перейти по этой ссылке: отражение api Это сэкономит вам массу времени. Он также может быть изменен, чтобы принять любой объект или унаследовать.

Вы также можете использовать: помощь (SomeClassModuleOrFunction)

Печатный текст, который исходит из help(), может быть ограничен, но использование экземпляра .props и loop над экземпляром также может иметь короткие события в зависимости от того, насколько хорошо документирован код.

Используйте любой из приведенных выше методов, чтобы получить хотя бы некоторую документацию. Если вам не подходит то, что вам нужно, попробуйте другой.

Ответ 5

использовать 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())