2010-08-18 2 views
0

나는이처럼 보이는 VBox 있습니다GTK : 확장 대신에 여러 줄을 간다 라벨은 수평

ImportantWidget 
    HSeparator 
    Label 

내가 ImportantWidget을 할 필요가 없으며 넓은으로이 창은 넓은되고 싶어요. 그러나 Label은 때로는 매우 길어질 수 있습니다. 나는 다음과 같은 논리를 원한다. LabelVBox을 확장하지 않고 모든 텍스트에 맞을 수 있다면 (ImportantWidget에 맞게 충분히 커지면) 그 텍스트는 모두 한 줄에 있어야한다. 그러나 오버플로가 발생하여 가로 크기 조정이 발생하면 대신 텍스트를 여러 줄로 분할해야합니다.

이미이 작업을 수행하는 위젯이 있습니까?이 작업은 Label보다 좋습니다. 그렇지 않다면 무엇을 사용해야합니까?

+0

더 많거나 적게 http://stackoverflow.com/questions/3152515/line-wrapping-in-gtkcheckbutton-or-gtkradiobutton-labels의 중복; 답변은 특히 귀하의 질문에도 적용됩니다. – ptomato

답변

1

동적으로 크기를 조정하는 레이블을 원하는 것처럼 보입니다.이 레이블은 GTK가 기본적으로 사용하지 않습니다. Meld repository에는 VMWare의 WrapLabel 위젯의 파이썬 포트가 있습니다. (this question)

0

아 예 this 그것을 수행하는 방법을 보여줍니다 :

l = gtk.Label("Painfully long text" * 30) 
l.set_line_wrap(True) 
+0

이것은 여전히 ​​완전히 작동하지 않습니다. 라벨에 할당 된 너비가 확장되면 줄 바꿈은 변경되지 않지만 그대로 유지됩니다. 누구든지 더 좋은 대답을 가지고 있습니까? 'set_justify'를'JUSTIFY_FILL'로 설정해도 그 문제가 발생합니다. – Claudiu

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()