如何在按钮内展开孩子?

时间:2015-05-27 19:43:58

标签: python python-3.x gtk gtk3

我刚刚更新到Fedora 22,并获得了Gnome 3.16。 我正在运行我的一个小应用程序,我收到了弃用警告。 Alignment对象的xscale属性将消失。但是有一个问题,没有它我就无法扩展按钮的子项。

我创建了这个简单的测试代码:

#!/usr/bin/env python3

import sys
from gi.repository import Gtk


class Application(Gtk.Application):

    def __init__(self):
        super().__init__()
        self.connect('activate', self.on_activate)
        self.connect('startup', self.on_startup)

    def on_startup(self, app):
        self.window = Gtk.ApplicationWindow(application=app)
        self.window.set_position(Gtk.WindowPosition.MOUSE)
        self.window.set_default_size(600, 200)
        button = Gtk.Button(label='test')
        image = Gtk.Image.new_from_file('noimage.png')
        button.set_always_show_image(True)
        button.set_image(image)
        # I can't expand without this property bellow
        button.get_child().set_property('xscale', 1.0)
        self.window.add(button)

    def on_activate(self, app):
        self.window.show_all()


if __name__ == '__main__':
    main_app = Application()
    exit_status = main_app.run(sys.argv)
    sys.exit(exit_status)

你应该看到一个小的宽窗口,里面有一个按钮,覆盖了窗户的所有可用空间。在按钮内部,您应该在左侧看到无效的图像图标,在右侧看到文本标签。

我使用xscale属性将图像与标签分开,这会扩展按钮内对齐对象的大小,并为标签和图像提供更多空间以展开。我想知道一种在没有它的情况下获得相同结果的方法。

我使用gtk检查器(在应用程序运行时按Ctrl + Shift + D)并在该窗口中的几乎所有对象中尝试了每个理智且不太理智的属性,但没有成功。我尝试了我可信赖的搜索引擎,但无法找到任何有这种特定问题的人。

1 个答案:

答案 0 :(得分:2)

GtkAlignment本身已被弃用。来自the docs

  

GtkAlignment已在3.14中弃用,不应在新编写的代码中使用。通过在子窗口小部件上使用“halign”,“valign”和“margin”属性,可以实现所需的效果。

你在这里做的不多。 GtkAlignment是GtkButton的内部子代,并且存在依赖于此结构的代码(例如您的代码)。如果GtkAlignment被删除(例如在GTK + 4中),GtkButton的内部结构也会改变。

如果确实想要避免使用已弃用的功能,您可以完全用水平GtkBox替换按钮的子项,将图像和标签打包在里面,然后设置图像&#39 ; s hexpandTrue来模拟xscale的1。

请查看this以获取有关新属性的更多信息。