2012-04-07 53 views
4

打開換行時,gtk.Label無法在中心對齊。示例代碼:多行gtk.Label忽略xalign = 0.5

import pygtk 
pygtk.require('2.0') 
import gtk 

class testwin(gtk.Window): 
    def __init__(self): 
     gtk.Window.__init__(self) 
     width,height = 300,300 
     self.set_size_request(width,height) 
     self.set_position(gtk.WIN_POS_CENTER) 
     self.set_title("test window") 

     label = gtk.Label("test text") 
     label.set_line_wrap(True) 
     label.set_justify(gtk.JUSTIFY_CENTER) 
     label.set_alignment(0.5,0.5) 
     label.connect("size-allocate",lambda l,s: l.set_size_request(s.width-1, -1)) 

     self.add(label) 
     self.connect("destroy", gtk.main_quit) 
     self.show_all() 

testwin() 
gtk.main() 

它看起來像這樣,這意味着,它的左對齊:http://m45.img-up.net/?up=pic122x97.png

如果您註釋掉線14(set_line_wrap)一切都完美的罰款:http://o54.img-up.net/?up=pic2y00p9.png

請注意,yalign工作正常。因此,當打開換行時,似乎gtk.Misc.set_alignment-function中的第一個參數不起作用。

使用的Fedora 16位,64位,GTK 3.2.4,PyGTK的2.24.0,蟒蛇2.7.2

問:這是有意或一個錯誤?它應該如何制定或者是一種解決方法?

+0

順便說一句,行爲與set_size_request有某種關係。但我需要這條線,因爲在我的用例中,包裝應該適應窗口大小調整。 – thomas 2012-04-07 16:48:00

+0

這發生在GTK + 2.24(C)上。 – 2014-12-24 13:34:04

回答

2

這不是一個真正的答案,但它不適合評論。

我會猜測這是一個錯誤。當我將您的代碼轉換爲PyGObject(PyGTK的繼任者)時,它可以像您期望的那樣工作。

from gi.repository import Gtk 

class testwin(Gtk.Window): 
    def __init__(self): 
     Gtk.Window.__init__(self) 
     width,height = 300,300 
     self.set_size_request(width,height) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.set_title("test window") 

     label = Gtk.Label("test text") 
     label.set_line_wrap(True) 
     label.set_justify(Gtk.Justification.CENTER) 
     label.set_alignment(0.5,0.5) 
     label.connect("size-allocate",lambda l,s: l.set_size_request(s.width-1, -1)) 

     self.add(label) 
     self.connect("destroy", Gtk.main_quit) 
     self.show_all() 

testwin() 
Gtk.main() 

當然,如果你被困在PyGTK的,你不能切換到PyGObject向右走,那麼這個答案不會解決你的問題。

+0

有趣的知道。在這個特殊情況下,它不會幫助。該代碼是一個相當大的PyGtk應用程序的一部分。目前還沒有計劃將整個事件遷移到PyGObject。 但只是出於興趣:PyGObject中有新對象的完整文檔嗎? – thomas 2012-04-07 20:56:28

+0

不是我見過的,雖然你可以在很多時候使用正常的GTK +文檔。另外,我通過查看[自動轉換腳本](http://git.gnome.org/browse/pygobject/tree/pygi-convert.sh)發現了PyGTK的更改,其中列出了大部分更改。 – dumbmatter 2012-04-07 21:02:57

+0

感謝您的參考。不幸的是,PyGObject仍然不是很實用。許多事情都沒有記錄,其他人甚至有缺陷(參見http://stackoverflow.com/questions/6133622/using-cairo-regions-in-python-with-gi-repository)。 – thomas 2012-04-07 22:05:16