如何展开按钮内的 children?
How do I expand the children inside a button?
我刚更新到 Fedora 22,并安装了 Gnome 3.16。
我是 运行 我的一个小应用程序,我收到了弃用警告。 Alignment object 的 xscale 属性 即将消失。但是有一个问题,没有它我无法展开按钮的 children。
我创建了这个简单的测试代码:
#!/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)
您应该会看到一个小宽 window,里面有一个按钮,覆盖了 window 的所有可用 space。在按钮内,您应该会在左侧看到一个无效的图像图标,在右侧看到一个文本标签。
我使用 xscale 属性 将图像与标签分开,这会扩大按钮内 Alignment object 的大小,并为标签和图像提供更多 space展开。我想知道没有它也能达到同样结果的方法。
我使用了 gtk 检查器(应用程序为 运行 时按 Ctrl+Shift+D)并在几乎所有 object 中尝试了每一个正常的和不太正常的 属性 window,没有成功。我尝试了我可信赖的搜索引擎,但找不到遇到此类特定问题的人。
GtkAlignment 本身已被弃用。来自 the docs:
GtkAlignment has been deprecated in 3.14 and should not be used in newly-written code. The desired effect can be achieved by using the “halign”, “valign” and “margin” properties on the child widget.
您在这里无能为力。 GtkAlignment 是 GtkButton 的内部子级,并且有代码(例如您的代码)依赖于此结构。如果 GtkAlignment 被移除(例如在 GTK+ 4 中),GtkButton 的内部结构也会改变。
如果您真的想避免使用已弃用的功能,您可以将按钮的子项完全替换为水平 GtkBox,将图像和标签打包在里面,然后设置图像的 hexpand
到 True
来模拟 1.
的 xscale
查看 this 了解有关新属性的更多信息。
我刚更新到 Fedora 22,并安装了 Gnome 3.16。 我是 运行 我的一个小应用程序,我收到了弃用警告。 Alignment object 的 xscale 属性 即将消失。但是有一个问题,没有它我无法展开按钮的 children。
我创建了这个简单的测试代码:
#!/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)
您应该会看到一个小宽 window,里面有一个按钮,覆盖了 window 的所有可用 space。在按钮内,您应该会在左侧看到一个无效的图像图标,在右侧看到一个文本标签。
我使用 xscale 属性 将图像与标签分开,这会扩大按钮内 Alignment object 的大小,并为标签和图像提供更多 space展开。我想知道没有它也能达到同样结果的方法。
我使用了 gtk 检查器(应用程序为 运行 时按 Ctrl+Shift+D)并在几乎所有 object 中尝试了每一个正常的和不太正常的 属性 window,没有成功。我尝试了我可信赖的搜索引擎,但找不到遇到此类特定问题的人。
GtkAlignment 本身已被弃用。来自 the docs:
GtkAlignment has been deprecated in 3.14 and should not be used in newly-written code. The desired effect can be achieved by using the “halign”, “valign” and “margin” properties on the child widget.
您在这里无能为力。 GtkAlignment 是 GtkButton 的内部子级,并且有代码(例如您的代码)依赖于此结构。如果 GtkAlignment 被移除(例如在 GTK+ 4 中),GtkButton 的内部结构也会改变。
如果您真的想避免使用已弃用的功能,您可以将按钮的子项完全替换为水平 GtkBox,将图像和标签打包在里面,然后设置图像的 hexpand
到 True
来模拟 1.
xscale
查看 this 了解有关新属性的更多信息。