Python3:我如何才能知道我在用GTK +的版本?(Python3: How can I fin

2019-10-17 06:07发布

我需要找出我在用GTK +的版本。 问题是,似乎有这么多不同的版本号参与我不知道哪些是最相关的。

我的系统是Ubuntu的12.04,并配备了libgtk2.0-0作为标准配置,但是当我安装我的Python 3.2的开发环境,我也装了一些其他的包绑定到GTK3。

大多数时候,这一切“只是工作”,但我想要实现的东西,(在devhelp)只适用于GTK的3.2版本。 不用说,我之所以问就是,Python找不到API的方法。

所以,现在我想知道什么(如果有的话),我可以做些什么,但首先我需要找出到底是什么,我有我的系统上了。

这个问题似乎是在正确的方向指向,但四年过时。 没有人有任何更多最新的信息,可以帮助?

编辑:感谢@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()

Answer 1:

请在您的Python提示符下或做在脚本中的等价物:

>>> from gi.repository import Gtk
>>> Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION
(3, 4, 3)

这个数字是GTK的实际的版本号,你正在使用。 的libgtk-3-0包指示该包是用于3.0系列,其中每个后续版本为3的主版本号与兼容。 如果他们改名包3.2,等等,那么你将无法升级它和所有其他的包都要碎了。

至于Gtk.Grid.get_child_at()这不是在我的Python安装的跟Gtk 3.4.2提供两种。 这很奇怪,因为Python API中自动地从C API生成的。 如果你正面临这样的问题,然后做的第一件事就是仔细检查有没有在你的程序不同的错误:

>>> from gi.repository import Gtk
>>> grid = Gtk.Grid()
>>> 'get_child_at' in dir(grid)
False

所以真的是没有方法。 有时方法被标记为(skip)的文档注释,这意味着他们是C-只,不应该用不同的语言绑定显示; 因此检查过。 GTK的源代码在网上点击这里 ; 搜索get_child_at ,你会看到有没有(skip)注释。 所以这不是问题,或者。

接下来要做的是检查PyGObject源代码的重写。 有时候,某些方法是由东西是更Python所取代; 例如, grid[0, 0]将远远超过更Python grid.get_child_at(0, 0)如果PyGObject团队曾想过,这将是真棒。

>>> grid[0, 0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'Grid' object has no attribute '__getitem__'

没有这样的运气。 所以看PyGObject的GTK覆盖这里 ,搜索get_child_atGrid等没有提及。

所以,剩下的,我能想到的唯一的可能性,就是一个错误。 转到http://bugzilla.gnome.org和报告缺乏在Python绑定此方法。 如果你感觉雄心勃勃,为什么不建议grid[0, 0]符号给他们呢?



Answer 2:

打开首选的外壳,并与当前安装的GTK名行

 rpm -q gtk2
 rpm -ql --info gtk2-2.8.20-1 |less

或者看看这个页面更近。 http://forums.fedoraforum.org/showthread.php?t=119358

这应该适用于Debian的,我认为

 dpkg -l | grep libgtk

更多信息CA在这里找到http://manpages.ubuntu.com/manpages/lucid/man1/dpkg.1.html



文章来源: Python3: How can I find out what version of GTK+ I am using?