如何创建多行按钮
我正在尝试用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.Label
的width_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 ()