小编Jac*_*b D的帖子

将 Python 中的 stdout 重定向到 PyGame

我在这里有一个非常奇怪的用例,我正在尝试为我的学生组合一些简单的程序来帮助他们学习 Python。为了让它工作,我在 TKinter 框架中嵌入了一个 PyGame 窗口,我需要重定向标准输出以更改 PyGame 窗口中的某些内容。我有重定向工作,如果我将它重定向到一个文件它工作正常,但如果我尝试更改文本它不起作用。我将一个字符串硬编码到 PyGame 文本更改代码中并且有效,但由于某种原因它不适用于重定向的文本。

重定向类:

class PrintTest:
    def __init__(self, file, game):
        self.f = file
        self.game = game
    
    def write(self, t):
        f.write(t)

        self.game.text = game.font.render(t, True, self.game.text_colors[1], self.game.text_colors[2])
        self.game.textRect = self.game.text.get_rect()

        self.game.textRect.center = (300, 300)

    def flush(self):
        pass
Run Code Online (Sandbox Code Playgroud)

游戏类:

class Game:
    def __init__(self, root):
        self.root = root
        embed = tk.Frame(root, width=600, height=600)
        embed.pack(side=tk.LEFT)

        os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
        if platform.system == "Windows":
            os.environ['SDL_VIDEODRIVER'] = 'windib'

        self.text_colors = [(255,255,255),
                            (0,255,0),
                            (0,0,128)]

        # initialize a pygame display
        pygame.init()
        self.screen …
Run Code Online (Sandbox Code Playgroud)

python pygame stdout

6
推荐指数
1
解决办法
126
查看次数

标签 统计

pygame ×1

python ×1

stdout ×1