使用 Pyglet 插入文本 on_mouse_press

Inserting text on_mouse_press using Pyglet

我正在尝试在单击鼠标后使用 Pyglet 将文本插入 window。 下面的代码创建了 window,当我点击屏幕时打印,但没有将文本添加到屏幕。

知道这是为什么吗?

提前致谢。

import pyglet
from pyglet.gl import *
from pyglet.window import mouse


class Drainage_Window(pyglet.window.Window):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_minimum_size(300, 300)

    def on_draw(self):
        self.clear()


if __name__ == '__main__':
    window = Drainage_Window(width=1920 // 4, height=1080//4,
                             caption="Drainage Network", resizable=True)
    glClearColor(0.7, 0.7, 1, 1)

    @window.event
    def on_mouse_press(x, y, button, modifiers):
        if button == mouse.LEFT:
            print('The left mouse button was pressed.')
            label = pyglet.text.Label('Click!',
                                  font_name='Times New Roman',
                                  font_size=16,
                                  x=x, y=y,
                                  anchor_x='center', anchor_y='center')

            window.push_handlers(pyglet.window.event.WindowEventLogger())

            @window.event
            def on_draw():
                label.draw()

    pyglet.app.run()

我只是稍微重新安排了您的代码,在 window class 中移动了鼠标按下事件。标签以None开头,当按下鼠标左键时,标签会变成一个Label对象。在draw方法中添加了一个简单的if检查,使得标签只有在不是None的时候才被绘制。现在可以使用了。

import pyglet
from pyglet.gl import *
from pyglet.window import mouse


class Drainage_Window(pyglet.window.Window):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_minimum_size(300, 300)

        self.label = None

    def on_mouse_press(self, x, y, button, modifiers):
        if button == mouse.LEFT:
            self.label = pyglet.text.Label('Click!',
                                  font_name='Times New Roman',
                                  font_size=16,
                                  x=x, y=y,
                                  anchor_x='center', anchor_y='center')

    def on_draw(self):
        self.clear()
        if self.label:
            self.label.draw()


if __name__ == '__main__':
    window = Drainage_Window(width=1920 // 4, height=1080//4,
                             caption="Drainage Network", resizable=True)
    glClearColor(0.7, 0.7, 1, 1)

    pyglet.app.run()