【问题标题】:Error on Panda3DPanda3D 出现错误
【发布时间】:2013-12-25 06:40:54
【问题描述】:

我正在尝试制作截图功能, 但每次我尝试时,它都会给我这个错误:

Traceback (most recent call last):
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 61, in eventLoop
Task
    self.doEvents()
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 55, in doEvents
    processFunc(self.eventQueue.dequeueEvent())
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 122, in processE
vent
    messenger.send(eventName, paramList)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 397, in send
    self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 482, in __dispatch
    method (*(extraArgs + sentArgs))
  File "C:\Panda3D-1.8.1\direct\showbase\ShowBase.py", line 2317, in __oobeButto
n
    messenger.send(button + suffix)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 397, in send
    self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 482, in __dispatch
    method (*(extraArgs + sentArgs))
TypeError: Screenie() takes exactly 1 argument (0 given)
:task(error): Exception occurred in PythonTask eventManager
Traceback (most recent call last):
  File "Play.py", line 791, in <module>
    run()
  File "C:\Panda3D-1.8.1\direct\showbase\ShowBase.py", line 2921, in run
    self.taskMgr.run()
  File "C:\Panda3D-1.8.1\direct\task\Task.py", line 502, in run
    self.step()
  File "C:\Panda3D-1.8.1\direct\task\Task.py", line 460, in step
    self.mgr.poll()
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 61, in eventLoop
Task
    self.doEvents()
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 55, in doEvents
    processFunc(self.eventQueue.dequeueEvent())
  File "C:\Panda3D-1.8.1\direct\showbase\EventManager.py", line 122, in processE
vent
    messenger.send(eventName, paramList)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 397, in send
    self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 482, in __dispatch
    method (*(extraArgs + sentArgs))
  File "C:\Panda3D-1.8.1\direct\showbase\ShowBase.py", line 2317, in __oobeButto
n
    messenger.send(button + suffix)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 397, in send
    self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
  File "C:\Panda3D-1.8.1\direct\showbase\Messenger.py", line 482, in __dispatch
    method (*(extraArgs + sentArgs))
TypeError: Screenie() takes exactly 1 argument (0 given)

这是截图的部分

def Screenie(self):
file_name = Filename('whatever.png')

self.win.saveScreenshot(file_name)

  base.accept('f9', Screenie)

谁能告诉我它有什么问题?我正在尝试修复它,但不知道该怎么做...

【问题讨论】:

    标签: python panda3d


    【解决方案1】:

    错误很明显

    TypeError: Screenie() takes exactly 1 argument (0 given)

    您的 Screenie 函数接受一个参数 (self),但无论调用它,都没有提供任何参数(即 Screenie() 而不是 Screenie(obj))。

    您选择self 作为Screenie 的参数让我觉得它是一个类方法。在那种情况下,你应该有这样的东西。

    class SomeCLass(object):
        # <snip>
        def Screenie(self):
            file_name = Filename('whatever.png')
            self.win.saveScreenshot(file_name)
    
    # Create instance
    instance = SomeClass()
    
    # Bind keypress to bound method on instance
    base.accept('f9', instance.Screenie)
    

    这确保Screenieself 参数绑定到instance 对象,并且您的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2012-01-20
      • 2013-01-25
      相关资源
      最近更新 更多