4

line-wrap がオンの場合、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、64 ビット、gtk 3.2.4、pygtk 2.24.0、python 2.7.2 を使用

質問: これは意図的なものですか、それともバグですか? どのように作られるべきか、または回避策はありますか?

4

1 に答える 1

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 に切り替えることができない場合、この回答では問題は解決しません。

于 2012-04-07T20:00:40.997 に答える