gpt4 book ai didi

Python Pyglet 鼠标事件不调用 on_draw() 也不在窗口中进行更改

转载 作者:行者123 更新时间:2023-12-02 04:15:14 25 4
gpt4 key购买 nike

出于某种原因,尽管我的 on_key_press() 函数有效,但我的程序中发生的任何鼠标事件都不会导致窗口中的图像消失或重新出现。

我尝试过状态标志并声明新的图像资源,但它不会改变窗口中的任何内容。

有办法让这个工作成功吗?我应该恢复到以前的 pyglet 版本吗?如果有,哪个版本?

这是我的程序代码;它运行时测试图像可见,每次按下按键或单击鼠标时,图像都会消失或重新出现:

import pyglet

window = pyglet.window.Window()

image = pyglet.resource.image('test.png')
image.anchor_x = image.width // 2
image.anchor_y = image.height // 2

state = True


@window.event
def on_draw():
print('on_draw() called')
window.clear()
if state:
image.blit(window.width // 2, window.height // 2)


@window.event
def on_mouse_press(x, y, button, modifiers):
global state, image
if button == pyglet.window.mouse.LEFT:
print('mouse press')
if state:
state = False
else:
state = True


@window.event
def on_key_press(symbol, modifiers):
global state
print('key press')
if state:
state = False
else:
state = True


pyglet.app.run()

谢谢!

编辑:我的python版本是3.7.2,我的pyglet版本是1.4.7,我使用pycharm,如果事实似乎因素......

最佳答案

这似乎是装饰器函数的问题。

正如 Torxed 建议的那样,不要装饰 on_mouse_press,而是用您自己的函数声明替换窗口对象的 on_mouse_press 函数:

import pyglet


image = pyglet.resource.image('test.png')
image.anchor_x = image.width // 2
image.anchor_y = image.height // 2

state = True


def on_draw():
print('on_draw() called')
window.clear()
if state:
image.blit(window.width // 2, window.height // 2)


def on_mouse_press(x, y, button, modifiers):
global state
print('mouse pressed')
if state:
state = False
else:
state = True


window = pyglet.window.Window()
window.on_draw = on_draw
window.on_mouse_press = on_mouse_press

pyglet.app.run()

否则,创建 Window 对象的子类并使用您自己的声明重写 on_mouse_press 函数:

import pyglet

class Window(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super().__init__(800, 600)
self.image = pyglet.resource.image('test.png')

self.image = pyglet.resource.image('test.png')
self.image.anchor_x = self.image.width // 2
self.image.anchor_y = self.image.height // 2

self.state = True

def on_draw(self):
print('on_draw() called')
window.clear()
if self.state:
self.image.blit(self.width // 2, self.height // 2)

def on_mouse_press(self, x, y, button, modifiers):
print('mouse pressed')
if self.state:
self.state = False
else:
self.state = True


window = Window()

pyglet.app.run()

关于Python Pyglet 鼠标事件不调用 on_draw() 也不在窗口中进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58950602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com