1

Phil の PyGame Utilities (PGU) を使用しています。変化するスクロール可能な変数のリストを表示する必要がある領域があります。これは、変数が変更されたときに変数のライブ更新を表示する必要があるデバッグ ウィンドウです。いくつかの異なるウィジェットといくつかの異なる方法でこれを試してみましたが、更新ループでウィジェットを更新するとスクロールバーがロックアップするという問題があります。

私の最初のアイデアは、リストにラベルを配置してから、ラベルを変更し、更新または再描画関数を呼び出すことでしたが、うまく機能していないようです。それを機能させるために、使用していたウィジェットを完全にクリアし、更新ループごとにすべてのラベルを再度追加しました。これにより、スクロールバーに問題が発生し、フレーム レートが低下します。

これが私がそれがうまくいくと思った方法です:

self.l = gui.List(width = self.config['uiwidth']-10, height = self.config['height']-230)
self.add(self.l, 5, 255)

self.label = gui.Label("UNCHANGED",align=-1)

    if self.firstTimeSelectingBot == True:
        for i in range(len(dbot.customDebugVariableList)):
            self.l.add(self.label, value = i)
        self.firstTimeSelectingBot = False
    self.label = gui.Label("CHANGED",align=-1)
    self.label.repaint()

リストにラベルを追加してから、ラベルを変更します。repaint を呼び出すと、ラベルが再描画されて新しいラベルが表示されると思いましたが、何も変わりません。テーブルとリストでこれを試しましたが、それを表示する唯一の方法は、リスト/テーブルを完全にクリアし、スクロールバーとフレームレートの問題を引き起こすすべてを再度追加することです。

助けやアイデアはありますか?ありがとう。

4

1 に答える 1

0

ラベルのテキストを変更するには、label.set_text を使用します。だからあなたのコードを例として使う

self.l = gui.List(width = self.config['uiwidth']-10, height = self.config['height']-230)
self.add(self.l, 5, 255)

self.label = gui.Label("UNCHANGED",align=-1)

    if self.firstTimeSelectingBot == True:
        for i in range(len(dbot.customDebugVariableList)):
            self.l.add(self.label, value = i)
        self.firstTimeSelectingBot = False
    self.label.set_text("CHANGED")

ただし、アライメントが取り除かれていることに注意してください。Label.set_text を配置すると失敗しますが、ラベルが作成されたときに設定された配置は、これが機能するように変更する必要がない限り維持されます。ラベル クラス自体については、pgu/gui/basic.py の 96 ~ 129 行を見てください。

于 2015-03-04T00:55:52.173 に答える