Как задать шрифт из файла ttf для label в gtk?
Учусь писать на gtk и наткнулся на такую непростую на мой взгляд задачу.
Требуется задать какой-то шрифт для label. Чего я уже добился:
...
lbl = Gtk.Label(label='Hello')
lbl.override_font(Pango.FontDescription('Arial 25'))
...
Работает! Но мне захотелось задать для лейбла шрифт из файла .ttf.
Какие-то решения в сети уже находил, но везде предлагают сначала установить этот щрифт (сделать его системным), а уже потом его использовать. А мне именно этого делать не надо.
Как задать .ttf-шрифт для лейбла, не устанавливая этот шрифт в систему?
Ответы (1 шт):
Автор решения: Рустам Рысаев
→ Ссылка
В GTK+ (PyGObject) можно загрузить шрифт из файла .ttf с помощью Pango и fontconfig, не устанавливая его в систему. Нужно создать Pango.FontMap и загрузить шрифт вручную.
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Pango, PangoCairo, GObject
import cairo
# Функция загрузки шрифта из файла
def load_font_from_file(font_path):
font_map = PangoCairo.FontMap.get_default()
context = font_map.create_context()
font_desc = Pango.FontDescription()
font_desc.set_family("CustomFont")
font_desc.set_size(25 * Pango.SCALE)
import subprocess
subprocess.run(["fc-cache", "-fv"], check=True)
return font_desc
# Основное GTK окно
class MyWindow(Gtk.Window):
def __init__(self):
super().__init__(title="Custom Font Label")
self.set_default_size(300, 200)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
self.add(vbox)
# Загрузка шрифта
font_desc = load_font_from_file("path/to/your-font.ttf")
lbl = Gtk.Label(label="Привет")
lbl.modify_font(font_desc)
vbox.pack_start(lbl, True, True, 0)
self.connect("destroy", Gtk.main_quit)
# Запуск GTK
win = MyWindow()
win.show_all()
Gtk.main()