如何创建多行按钮

0 投票
2 回答
1655 浏览
提问于 2025-04-15 22:38

我正在尝试用PyGTK创建一个多行按钮。我在我自定义的gtk.Button中添加了一个标签,但我在调整标签大小以适应按钮时遇到了问题。如果标签自己决定大小,即使我使用了label.set_line_wrap(True)来设置文本换行,标签也会超出按钮的范围,导致没有换行。我想把标签的大小设置成按钮的大小,但除非我明确使用set_size_request来设置按钮的大小,否则我找不到按钮的实际大小(因为它被放在一个表格中)。

有什么建议吗?

2 个回答

0

我发现,在Python 3.4和GTK+3中,你只需要在想要换行的地方加一个\n就可以了。虽然它不会自动换行,但你可以为按钮对象设置多行标签。例如:

self.button = Gtk.Button(label="A lotta text \n and a lotta more.")
1

一般来说,在GTK+中,这是不可能的,因为没有一个阶段是让小部件“协商”大小的。相反,小部件会报告它们所需的大小,然后容器会分配一些区域(通常是等于或大于所需的大小)。在GTK+ 3中,会有宽度与高度的协商,所以如果你的按钮(更确切地说是它的标签)需要分配几行,它就可以请求更少的宽度,并且可以换行显示文本。

在2.x版本中,你能做的最好的是使用gtk.Labelwidth_chars属性:

import gtk

window = gtk.Window ()
align  = gtk.Alignment (0.5, 0.5)
button = gtk.Button ('a very long, possibly multiline text')

label = button.child
label.props.wrap = True
label.props.width_chars = 20

window.set_default_size (500, 500)
window.connect ('destroy', lambda *ignored: gtk.main_quit ())

window.add (align)
align.add (button)
window.show_all ()

gtk.main ()

撰写回答