在PGU中自动向下滚动

时间:2015-02-25 22:58:31

标签: python python-3.x pygame pgu

我正在使用PGU作为我在python3中使用pygame编写的游戏的GUI。这个游戏将有多人游戏,所以我一直在研究游戏中的聊天系统。聊天系统工作并且在滚动区域中显示没有问题,但是当接收到新消息时滚动区域不会自动向下滚动。这意味着每次有新消息时,用户需要手动向下滚动以阅读新消息。有没有人知道如何用PGU做到这一点?或者有人建议采取其他方式吗?我自己环顾四周,发现this example表明它可以完成但是那里发布的代码似乎没有显示我正在寻找的部分。这是我自己的代码的一个愚蠢的版本。收到聊天消息后,会自动调用chatmessage。

class ChatScreen:
    def __init__(self):
        self.desktop = gui.Desktop(theme=gui.Theme("data/themes/default/"))
        self.container = gui.Container(width=800,height=600)
        self.chatinput = gui.Input(size=65)
        self.chatdoc = gui.Document(width=1, height=10)
        self.chatscroll = gui.ScrollArea(self.chatdoc,width=600,height=100,hscrollbar=False)

        self.container.add(self.chatinput, 10, 550)
        self.container.add(self.chatscroll, 10, 440)
        self.desktop.init(self.container)

    def chatmessage(self, message):
        self.chatdoc.add(gui.Label(message))
        self.chatdoc.br(1)

1 个答案:

答案 0 :(得分:0)

我找到了自己解决这个问题的方法。我正在为将来可能会遇到此问题的其他人发布答案。这是我更新的示例代码,其中包含修复程序:

class ChatScreen:
    def __init__(self):
        self.desktop = gui.Desktop(theme=gui.Theme("data/themes/default/"))
        self.container = gui.Container(width=800,height=600)
        self.chatinput = gui.Input(size=65)
        self.chatdoc = gui.Document(width=1, height=10)
        self.chatscroll = gui.ScrollArea(self.chatdoc,width=600,height=100,hscrollbar=False)

        self.container.add(self.chatinput, 10, 550)
        self.container.add(self.chatscroll, 10, 440)
        self.desktop.init(self.container)

    def chatmessage(self, message):
        self.chatdoc.add(gui.Label(message))
        self.chatdoc.br(1)
        self.desktop.loop()
        self.chatscroll.set_vertical_scroll(someint)

我发现set_vertical_scroll()强制设置滚动区域的位置。通过将someint设置为更大的数字,然后将聊天框中的消息数量设置为底部。在一个真正有效的解决方案中,someint需要是一个随着消息数量而增加的变量,或者必须对显示的消息数量进行限制(这是我对项目所做的事情)。