PyGame PGU更新/重新绘制小部件

时间:2013-06-27 13:55:45

标签: python user-interface pygame pgu

我正在使用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()

它在列表中添加标签,然后更改标签。我认为调用重绘会重新标记标签以显示新标签,但没有任何变化。我用表格和列表尝试了这个,但是我可以让它显示的唯一方法是购买完全清除列表/表并重新添加导致滚动条和帧速率问题的所有内容。

任何帮助或想法?感谢。

1 个答案:

答案 0 :(得分: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行的标签类本身,这就是我想出来的结果(我也在寻找自己的答案)。