24

PyGObjectには実際のドキュメントがないようです。このチュートリアルは、可能な限り近いものです。Gtk.Window私は午前中ずっと、コンストラクターによって受け入れられた引数の説明を見つけようとして苦労してきました。PyGObjectのすべてが動的に生成されるため、Pythonではあまり反映できないようです。

私が欲しいのは、このコンストラクターに渡すことができる引数を知ることだけです!GTK + 3のドキュメントには、このオブジェクトに相当するものはないようです。ソースコードを読んでバインディングを理解することは、非常に困難な作業であることが証明されています。何か案は??

4

5 に答える 5

22

これは、現在の状態でのPyGObjectの大きな欠点であることに同意します。GTK +をしばらく使用している私たちにとっては問題ありませんが、新しいユーザーにとっては混乱を招く可能性があります。

人々は、 GObjectIntrospectionDoctoolsとして知られているC以外の言語のドキュメントを自動的に生成するシステムに取り組んでいます。まだ準備が整っていないため、C APIドキュメントを使用して、 Pythonにどのように変換されるかを学ぶのが最善の策です。思ったほど難しくはありません。

Python呼び出しは、基盤となるCライブラリに動的にラップされることを忘れないでください。あなたがする必要があるのは、いくつかのものが通常Pythonに変換される方法を学び、GTK+の「プロパティ」がどのように機能するかを理解することです。これは基本的にCの命名規則であり、パターンは簡単に習得できます。PyGObject /IntrospectionPortingページは良いスタートです。

Pythonのコンストラクターは通常*_new()、Cの関数にラップされます。PyGObjectを使用すると、そのウィジェットに属する任意のGTK+プロパティをコンストラクターのキーワード引数として渡すこともできます。したがって、Pythonでウィジェットを作成する場合、多くのオプションがあります。

あなたは言及しましたGtkWindowGtkWindow Documentationを見ると、gtk_window_new()関数はCの引数としてウィンドウタイプを取ります。これは、Pythonのコンストラクターに対する位置引数になります。PyGObjectはコンストラクターを「オーバーライド」するため、typeはオプションであり、デフォルトでトップレベルウィンドウになります。キーワード引数としてコンストラクターに渡すこともできるGtkWindowプロパティがたくさんあります。

Gtk.Window機能的に同等のPythonでの構築の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インタラクティブコンソールは、ウィジェットとプロパティを試すのに最適な方法です。

于 2012-07-21T05:37:27.267 に答える
15

ドキュメントはここにあります: 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シェルにタブ補完を追加するにはどうすればよいですか?

于 2014-04-03T16:11:07.107 に答える
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
于 2013-02-07T21:28:42.930 に答える
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__

リフレクションが必要な場合は、次のリンクにアクセスできます。リフレクションapi これにより時間を大幅に節約できます。また、任意のオブジェクトを受け入れるように変更したり、継承したりすることもできます。

次のものも使用できます: help(SomeClassModuleOrFunction)

ただし、help()から出力されるテキストは制限できますが、instance.propsを使用してインスタンスをループすることも、コードがどれだけ適切に文書化されているかによっては、欠点が生じる可能性があります。

上記の方法のいずれかを使用して、少なくともいくつかのドキュメントを入手してください。1つが必要なものに合わない場合は、別の方法を試してください。

于 2012-08-05T02:32:17.047 に答える
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())
于 2013-06-24T07:49:04.633 に答える