1

Pygletでさまざまなフォントの複数のテキストラベルを表示したいと思います。この場合、私は「Ubuntu」フォントを太字で使用しており、それ以外の場合は斜体で使用しています。この場合、私はフォントファイルとしてUbuntu-B.ttfとを持っています。Ubuntu-BI.ttf

指示に従って、私はフォントをロードしています:

pyglet.font.add_file(font_filename)

次に、その顔の名前で使用します(フォントファイルから取得する方法がわからないため、「Ubuntu」をハードコーディングしています)。

label = pyglet.text.Label(text="Hello", font_name="Ubuntu", font_size=16)

残念ながら、Pygletフォントシステムは最初のフォントをその顔の名前でしか登録していないようUbuntuで、イタリックまたはその他のフォントのすべてのインスタンスにそれを使用します。

したがって、Ubuntu-BI.ttf最初にロードする場合、のすべての使用Ubuntu法はイタリック体です。最初にロードUbuntu-B.ttfすると、後の段階でイタリックフォントをロードした場合でも、すべての使用法はイタリックではない太字になります。

実行時にロードされたフォントをクリアまたは削除する明確な方法がわかりません。これを処理する方法はありますか?

4

2 に答える 2

4

私は自分の解決策を見つけました。特定のフォント ファイルの正しいフェイス名pyglet.font.ttf.TruetypeInfoを取得するために使用できる、ドキュメント化されていないクラスが呼び出されます。これにより、さまざまなフォントを使用しようとするときに、正しい顔名を使用できます (不完全な顔名に基づいて最適なオプションを選択するために Pyglet に依存するのではなく)。したがって、必要なフォントを直接使用できるようになりました。

def load_font(path):
    # load external font from file
    p = TruetypeInfo(path)
    name = p.get_name("name")
    p.close()
    font.add_file(path)
    print("Loaded font " + name + " from " + path)

pyglet-usersスレッドを参照してください。

于 2013-02-20T21:27:45.657 に答える
0

meowsqueak の答えに基づいて、get_name('family')代わりにget_name('name'). より具体的に言うと、私の場合、Bold バージョンのみを含む単一の .ttf ファイルがありました。使用する

    p = pyglet.font.ttf.TruetypeInfo(path)
    print p.get_name('name')
    print p.get_name('family')

生産された

Orbitron Bold
Orbitron

pyglet はフォントを取得しませんでした

pyglet.text.Label(text="Text", font_name='Orbitron Bold')

しかし

pyglet.text.Label(text="Text", font_name='Orbitron', bold=True,

働きました。

于 2015-11-13T02:53:49.293 に答える