gtk: 标签如何换行而不是水平扩展
我有一个 VBox
,它的样子是这样的:
ImportantWidget
HSeparator
Label
我希望这个窗口的宽度只要和 ImportantWidget
一样宽就可以,不要更宽。不过,Label
有时候可能会变得很长。我想要这样的逻辑:如果 Label
的文本可以在不让 VBox
水平扩展的情况下全部显示出来(在它已经足够大以适应 ImportantWidget
的情况下),那么这些文本应该都在一行上。但如果文本太长,导致需要水平扩展,那么它就应该把文本分成多行显示。
有没有比 Label
更适合这个任务的组件?如果没有,我应该用什么呢?
3 个回答
1
编辑:
这是一个动态标签的例子,它可以根据窗口和文本的大小自动调整为多行显示:
import gtk
class DynamicLabel(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_title("Dynamic Label")
self.set_size_request(1, 1)
self.set_default_size(300,300)
self.set_position(gtk.WIN_POS_CENTER)
l = gtk.Label("Painfully long text " * 30)
l.set_line_wrap(True)
l.connect("size-allocate", self.size_request)
ImportantWidget = gtk.Label("ImportantWidget")
vbox = gtk.VBox(False, 2)
HSeparator = gtk.HSeparator()
vbox.pack_start(ImportantWidget, False, False, 0)
vbox.pack_start(HSeparator, False, False, 0)
vbox.pack_start(l, False, False, 0)
self.add(vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
def size_request(self, l, s ):
l.set_size_request(s.width -1, -1)
DynamicLabel()
gtk.main()
1
哦,没错,这个链接展示了怎么做:
l = gtk.Label("Painfully long text" * 30)
l.set_line_wrap(True)