2

Pyglet の ScrollableTextLayout でテキストを下ではなく上にスクロールする方法を見つけようとしています。わかりやすくするために、「アップ」の意味を示す簡単なスナップショットを次に示します。(念のため)

現在の動作

どのように動作させたいですか:

ここに画像の説明を入力

ドキュメントによると、この動作は view_y プロパティを介して実現できますが、あらゆる種類の異なる値を試しましたが、すべて目立った変化はありませんでした。

コード:

import pyglet

class LoadDialog(pyglet.sprite.Sprite):
    def __init__(self):
        self.lbatch = pyglet.graphics.Batch()

        self.loading_window = pyglet.image.load('..\\resources\\loading_base.png')
        super(LoadDialog, self).__init__(self.loading_window, batch=self.lbatch)


        self.doc = pyglet.text.decode_text('Hello world!'.ljust(40))
        self.doc.set_style(0,12, dict(font_name='Arial', font_size=12,
                                    color=(0,0,0,255)))

        self.layout = pyglet.text.layout.ScrollableTextLayout(self.doc, 
                                            width=self.load_animation.width, 
                                            height=100, multiline=True, batch=self.lbatch)
        self.layout.x = 220
        self.layout.y = 160
        self.layout.view_y = -80

    def update(self, dx):
        self.doc.insert_text(0, "New line".ljust(40))






sprite = LoadDialog()
window = pyglet.window.Window(width=640, height=480)

pyglet.gl.glClearColor(1, 1, 1, 1)

@window.event
def on_draw():
    window.clear()
    sprite.lbatch.draw()
    sprite.layout.draw()

@window.event
def update(dx):
    sprite.update(dx)

pyglet.clock.schedule_interval(update, 1.0)
pyglet.app.run()

layout.view_yからの-1ようなばかげた値まで-3000、または500単に何かが変化するかどうかを確認するために、たくさんの値を試しました。ただし、最初の画像に示すように、常に正確な動作が得られます。

私は何を間違っていますか?

4

1 に答える 1

1

まず、あなたの例は画像ファイルとその幅(提供されていません)に依存しているため、テストが少し複雑です。

次に、 pyglet.text.decode_textを呼び出してUnformattedDocumentを作成し、次の行の位置 0 (開始) で明示的にUnformattedDocumentにテキストを繰り返し挿入します。

def update(self, dx):
    self.doc.insert_text(0, "New line".ljust(40))

グラフィックで示唆しているように、テキストを最後に表示したい場合は、最後に挿入してください。

def update(self, dx):
    # Fix the implied bug
    self.doc.insert_text(-1, "New line".ljust(40))

第三に、実際に述べられた質問に答えましょう。プロパティScrollableTextLayout.view_yの API ドキュメントを読むと、...

[height - content_height, 0] の範囲外の値は、範囲内で自動的にクリップされます。

...そのため、content_height が 0 のときに view_y を -80 に設定すると、view_y が 0 にクリップされ、view_y を再度設定しようとしなくなります。スクロールの問題を解決するには、コンテンツの高さが変わるたびに view_y を設定します。簡単な修正として、コンテンツの下部が常にフレームの下部までスクロールされるように view_y を設定するだけです。

def update(self, dx):
    # Fix the implied bug
    self.doc.insert_text(-1, "New line".ljust(40))
    # The answer to the stated question
    self.layout.view_y = -self.layout.content_height
于 2012-09-24T01:25:40.347 に答える