Ошибка на Panda3D
Я пытаюсь сделать функцию скриншота, но каждый раз, когда я пытаюсь, это дает мне эту ошибку:
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)
Может кто-нибудь сказать мне, что с ним не так? Я пытаюсь это исправить, но не могу понять, что делать...
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)
Это гарантирует, что self
аргумент Screenie
связан с instance
объект, и ваш код должен работать.