使用python在Gtk中将标签内的文本垂直居中

时间:2019-05-30 07:45:40

标签: label gtk gtk3 pygtk gdk

我正在尝试将标签文本垂直放置在框中。这是我正在尝试的代码:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

win = Gtk.Window()
win.set_default_size(200, 100)

box = Gtk.Box()
win.add(box)
lbl = Gtk.Label("FOO")
lbl.set_vexpand(True)
lbl.set_valign(Gtk.Align.CENTER)
# Set the background to make the problem visible
lbl.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(red=1, green=0, blue=0))
box.add(lbl)

win.show_all()
win.connect('destroy', Gtk.main_quit)
Gtk.main()

如您所见,标签本身在框内居中对齐,但标签内的文本向标签顶端稍稍偏移:

Picture showing the problem

我什么都找不到。程序和基于CSS的解决方案受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我相信问题是您和字体创建者对垂直方向上的“居中”的含义有不同的看法。也请考虑如果您使用 y g 这样的字符会给视觉印象带来什么影响。如果将国际字符添加到ÅÖ之类的组合中,这将更加令人困惑。

无论如何,此答案使用CSS创建可配置的偏移量(顶部填充),并且还使您可以自由更改字体。 20 px的值显然太大了,但可以清楚地看到它起作用的证据。

style.css

#custom_label {
    padding-top: 20px;
    background-color: red;
    font: Vera 20px;
}

test.py

import gi

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

win = Gtk.Window()
win.set_default_size(200, 100)

box = Gtk.Box()
win.add(box)
lbl = Gtk.Label(u'FOO')
lbl.set_name('custom_label')
box.add(lbl)

style_provider = Gtk.CssProvider()
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
with open("style.css") as f:
    style_provider.load_from_data(f.read())

win.show_all()
win.connect('destroy', Gtk.main_quit)
Gtk.main()

作为奖励,如果您通过以下方式启动程序,

GTK_DEBUG=interactive python test.py

(假设Linux,不确定在Windows中如何执行此操作),您将可以通过交互方式更改CSS和其他小部件属性。