multiline gtk.Label忽略xalign = 0.5

打开换行时,gtk.Label无法在中心对齐.示例代码:

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,64bit,gtk 3.2.4,pygtk 2.24.0,python 2.7.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,那么这个答案并不能解决你的问题.

点赞