静态宽度Gtk.箱用动态可变宽度的子容器布局容器

2024-04-19 12:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个垂直方向的Gtk.Box,我希望它有一个静态宽度。原因是Box中有大小不同的子级,我希望整个布局具有相同的外观,而不是像现在窗口中的其他内容重新排序时那样

例如,Box子窗口小部件之一是Label,在程序运行期间,它被赋予不同的字符串。(我正在包装内容以便显示整个字符串)

如何为一个盒子容器设置一个静态宽度,即使这个容器有想要扩展父容器的子容器?在

我目前所做的努力:

  • 在父级(布局)和子级(小部件)上使用^{}
  • 在父对象(它是一个hbox)上使用^{},父对象(layout)作为第一个参数,而expand和fill参数使用False

这些都不适合我。调整大小是否来自程序的内部更改或我调整窗口大小都无关紧要,这些似乎仍然没有效果

欢迎任何帮助!在

编辑:

对此进行更详细的研究后,我发现仅当Label的文本足够短而不会与小部件边缘冲突时,如上所述使用pack_start才有效果

在测试时,我可以看到的行为是文本确实被包装,但只有在它占用了尽可能多的空间之后,所以在确定Label中的文本长度似乎优先于pack_start(和set_halign)来确定{}

使用下面的代码示例,将短文本切换为长文本以查看差异,并根据窗口大小进行调整,很明显这就是它的工作原理

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

win = Gtk.Window()
win.set_default_size(400, 300)

hbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
win.add(hbox)

vbox_left = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)
vbox_left.set_hexpand(False) # <-----
vbox_right = Gtk.Box(orientation = Gtk.Orientation.VERTICAL)

long_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit amet nisi nibh. Quisque aliquam erat et lorem tempus malesuada."
short_text = "Lorem ipsum"

dynamic_label_left = Gtk.Label(short_text) # <-----
dynamic_label_left.set_line_wrap(True)
vbox_left.pack_start(dynamic_label_left, True, True, 0) # should not matter since it's vertical packing
hbox.pack_start(vbox_left, False, False, 0) # <-----

button_right = Gtk.Button("Button")
vbox_right.pack_start(button_right, True, True, 0)
hbox.pack_start(vbox_right, True, True, 0) # <-----

win.connect('delete-event', Gtk.main_quit)
win.show_all()
Gtk.main()

我的设置:

  • Ubuntu 16.04
  • 在gi.版本信息=3.20
  • Python 3.5.2版

Tags: 文本rightboxfalsetruegtkleftstart