2010-05-13 80 views
0

我試圖用PyGTK創建多行按鈕。我在gtk.Button的子類中添加了一個標籤,但我無法根據標籤大小選擇按鈕。如果標籤使其具有自己的尺寸,則即使使用label.set_line_wrap(True)也沒有文字環繞,因爲標籤只是調整超出按鈕的範圍。我會將標籤的大小設置爲按鈕的大小,但除非我使用set_size_request明確設置按鈕的大小,否則我無法確定按鈕的大小(它被打包在表格中)。如何創建多行按鈕

有什麼建議嗎?

回答

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

這不僅工作,但它比我放在一起更清潔的代碼。 – exupero 2010-05-13 22:45:38

0

我發現,在Python 3.4 GTK + 3,所有你需要做的就是添加你想要的一個\n打破。它不會自動保存,但您可以爲按鈕對象設置多行標籤。例如,

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