0

我正在使用PGU作为我在 python3 中使用 pygame 编写的游戏的 GUI。该游戏将包含多人游戏,因此我一直在研究游戏内聊天系统。聊天系统可以正常工作并显示在滚动区域中,但在收到新消息时滚动区域不会自动向下滚动。这意味着每次有新消息时,用户都需要手动向下滚动以阅读新消息。有谁知道用 PGU 做到这一点的方法?或者有人对这样做的替代方式有建议吗?我自己环顾四周,我发现了这个例子表明它可以完成但是发布在那里的代码似乎没有显示我正在寻找的部分。这是我自己的代码的简化版本。当收到聊天消息时,会自动调用聊天消息。

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)
4

1 回答 1

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 需要是一个随消息数量增加的变量,或者必须限制显示的消息数量(这是我对项目所做的)。

于 2015-03-09T07:31:05.287 回答