使用している GTK+ のバージョンを確認する必要があります。問題は、非常に多くの異なるバージョン番号が関係しているように見えることです。どれが最も関連性があるかわかりません。
私のシステムは Ubuntu 12.04 であり、libgtk2.0-0 が標準で付属していますが、Python 3.2 開発環境をインストールしたときに、GTK3 にバインドする他の多くのパッケージもインストールしました。
ほとんどの場合、これはすべて「うまくいく」のですが、GTK のバージョン 3.2 でのみ (devhelp で) 利用できるものを実装したいと考えています。言うまでもなく、私が質問した理由は、Python が API でメソッドを見つけられないからです。
それで、今、私はそれについて何ができるか(もしあれば)疑問に思っていますが、最初に自分のシステムに何があるのか を正確に知る必要があります.
この質問は正しい方向を指しているように見えますが、4 年も前のものです。誰かが役立つ最新の情報を持っていますか?
編集: @ptomato と @Pablo の有益な回答に感謝します。私の問題は、出てくるさまざまな象形文字をどのように理解するかです。dpkg の出力は (特に) 次のようになります。
bob@bobStudio:~$ dpkg -l libgtk* | grep ^i
ii libgtk-3-0 3.4.2-0ubuntu0.4 GTK+ graphical user interface library
ii libgtk-3-bin 3.4.2-0ubuntu0.4 programs for the GTK+ graphical user interface library
ii libgtk-3-common 3.4.2-0ubuntu0.4 common files for the GTK+ graphical user interface library
ii libgtk-3-dev 3.4.2-0ubuntu0.4 development files for the GTK+ library
ii libgtk-3-doc 3.4.2-0ubuntu0.4 documentation for the GTK+ graphical user interface library
[etc....]
Python3シェルでは、次のようになります
>>> from gi.repository import Gtk
>>> Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION
(3, 4, 2)
これを正しく読んだ場合 (よくわかりません)、これは GTK+ バージョン 3.4.2 を使用していることを意味しますが、ライブラリの番号、つまりlibgtk-3-0
. また、3.4.2 を使用している場合、3.2 で使用可能であるとラベル付けされたメソッドが存在しないのはなぜですか?
誰かが異なる数字の意味を説明できますか?
EDIT2:より具体的には、私が調査している方法はGtk.Grid().get_child_at()
. DevHelp GTK+ マニュアルから、
gtk_grid_get_child_at ()
GtkWidget * gtk_grid_get_child_at (GtkGrid *grid,
gint left,
gint top);
Gets the child of grid whose area covers the grid cell whose upper left corner is at left, top.
grid : a GtkGrid
left : the left edge of the cell
top : the top edge of the cell
Returns : the child at the given position, or NULL
Since 3.2
現在のプロジェクトでこの方法を使用しようとしましたが、スタック トレースに次のメッセージが表示されます。
neighbour = self.parent.grid.get_child_at(x, y)
AttributeError: 'Grid' object has no attribute 'get_child_at'
しかし、私が Gtk 3.4.2 を使用していて、メソッドが「3.2 以降」で利用可能だった場合、あまり意味がないように思われます。多分私は他の場所で間違いを犯しましたか?
エラーを説明する短いテスト プログラムを次に示します (<-------- とマークされた行を参照)。
from gi.repository import Gtk
window = Gtk.Window()
grid = Gtk.Grid()
window.add(grid)
# the callout method
def on_button_clicked(widget):
origin = grid.get_child_at(0, 0) #<-------------
if widget == origin:
print('You clicked (0,0)')
else:
print('You clicked (1,0)')
# add a couple of widgets
button00 = Gtk.Button()
button10 = Gtk.Button()
button00.set_label('(0,0)')
button10.set_label('(1,0)')
grid.attach(button00, 0, 0, 1, 1)
grid.attach(button10, 1, 0, 1, 1)
# attach the callouts
button00.connect("clicked", on_button_clicked)
button10.connect("clicked", on_button_clicked)
# display the window
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()