【问题标题】:How do I expand the children inside a button?如何在按钮内展开子项?
【发布时间】:2015-05-27 19:43:58
【问题描述】:

我刚刚更新到 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 属性将图像与标签分开,这扩大了按钮内 Alignment 对象的大小,并为标签和图像的展开提供了更多空间。我想知道没有它也能达到同样结果的方法。

我使用了 gtk 检查器(在应用程序运行时按 Ctrl+Shift+D)并尝试了该窗口中几乎所有对象中的所有正常和不太正常的属性,但没有成功。我尝试了可靠的搜索引擎,但找不到遇到此类特定问题的人。

【问题讨论】:

    标签: python python-3.x gtk gtk3


    【解决方案1】:

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

    GtkAlignment 在 3.14 中已被弃用,不应在新编写的代码中使用。可以通过在子窗口小部件上使用“halign”、“valign”和“margin”属性来达到预期的效果。

    您在这里无能为力。 GtkAlignment 是 GtkButton 的内部子代,并且有代码(例如您的代码)依赖于此结构。如果 GtkAlignment 被移除(例如在 GTK+ 4 中),GtkButton 的内部结构也会发生变化。

    如果你真的想避免使用不推荐使用的函数,你可以将按钮的子元素完全替换为水平 GtkBox,将图像和标签打包在里面,并将图像的 hexpand 设置为 @987654324 @模拟1的xscale

    查看this,了解有关新属性的更多信息。

    【讨论】:

    • 谢谢。我刚刚创建了一个没有任何参数的 Button 对象,我认为默认情况下它会为其添加一个空标签,但没有。我什至不需要从按钮中删除孩子。刚刚按照您的建议创建了一个漂亮的水平框,将其添加到按钮中,并将其他小部件打包在框中。它就像一个魅力。 ^_^
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多