【问题标题】:How to Create a Multiline Button如何创建多行按钮
【发布时间】:2010-05-13 00:19:25
【问题描述】:
我正在尝试使用 PyGTK 创建一个多行按钮。我在我的 gtk.Button 子类中添加了一个标签,但是我在调整按钮的标签大小时遇到了问题。如果标签具有自己的大小,则即使使用label.set_line_wrap(True) 也不会自动换行,因为标签只是调整大小超出了按钮的范围。我会将标签的大小设置为按钮的大小,但除非我使用set_size_request 明确设置按钮的大小,否则我无法找出按钮的大小(它被打包在一个表中) .
有什么建议吗?
【问题讨论】:
标签:
python
button
label
pygtk
【解决方案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 ()
【解决方案2】:
我发现在 Python 3.4 GTK+3 中,你需要做的就是在你想要中断的地方添加一个\n。它不会自动换行,但您可以为按钮对象设置多行标签。例如,
self.button = Gtk.Button(label="A lotta text \n and a lotta more.")