Python 子类化窗口时如何在pyglet中安排回调
文档中Python 子类化窗口时如何在pyglet中安排回调,python,pyglet,Python,Pyglet,文档中pyglet.clock.schedule的典型示例如下: def callback(dt): print(f"{dt} seconds since last callback") clock.schedule_interval(callback, .5) 我一直在尝试使用子类窗口来实现这一点。例如: import pyglet from pyglet.gl import * class MyWindow(pyglet.window.Window):
pyglet.clock.schedule
的典型示例如下:
def callback(dt):
print(f"{dt} seconds since last callback")
clock.schedule_interval(callback, .5)
我一直在尝试使用子类窗口来实现这一点。例如:
import pyglet
from pyglet.gl import *
class MyWindow(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5)
def test(self, dt):
print("test")
if __name__ == "__main__":
window = MyWindow(visible=False, resizable=True)
pyglet.app.run()
我收到以下错误消息:
TypeError:test()接受2个位置参数,但给出了3个
我还希望能够传递其他参数,如:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5, val=100)
def test(self, dt, val):
print(val)
但这会导致错误消息
TypeError:test()为参数“val”获取了多个值
我怎样才能解决这个问题?我可能可以通过不子类化窗口来实现,但据我所知,子类化窗口是组织pyglet应用程序的常用方法。回调的第一个参数始终是自上次调用以来的时间。还可以传递其他参数 第一个测试修复:
class MyWindow(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5) # sends dt and 0.5 as args
def test(self, dt, val): # val = 0.5
print("test")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5, val=100) # sends dt, 0.5, val=100
def test(self, dt, val0, val): # val0 = 0.5
print(val)
第二个测试修复:
class MyWindow(pyglet.window.Window):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5) # sends dt and 0.5 as args
def test(self, dt, val): # val = 0.5
print("test")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
pyglet.clock.schedule(self.test, 0.5, val=100) # sends dt, 0.5, val=100
def test(self, dt, val0, val): # val0 = 0.5
print(val)
要澄清的是,获取多个值
错误意味着您提供了一个参数作为位置参数和命名参数
例如:
def myfunc(p):
print (p)
myfunc(1, p = 5) # error, sending 'p' parameter twice
还要注意,您提到的文档是针对
pyglet.clock.schedule\u interval
的,它使用第二个参数作为时间延迟。在您的代码中,您使用的是只接受一个参数的pyglet.clock.schedule
。正如您所说,我把schedule
误认为是schedule\u interval
。将计划
替换为计划间隔
后,一切正常。。。