我正在尝试将标签文本垂直放置在框中。这是我正在尝试的代码:
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()
如您所见,标签本身在框内居中对齐,但标签内的文本向标签顶端稍稍偏移:
我什么都找不到。程序和基于CSS的解决方案受到高度赞赏。
答案 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和其他小部件属性。