I can never remember which way round the arguments of ln are supposed to go
However, from the output you posted, it looks as though you created a link called /opt/sunflower/Sunflower.py to a directory ... possibly you have overwritten the script by doing so.
Also, the whole idea of the symlink is that you launch the app via /usr/local/bin/sunflower. It's just a symlink, but it points to the actual executable file (sunflower.py) and it is in your $PATH. The way you have done it in the .desktop file, you don't need the symlink at all; but other ways of calling sunflower (for instance, from the command line) won't work. Or indeed, it looks like that way doesn't work either. But if it did, there would be no need for the symlink.
Depending on your desktop environment, to make sunflower-fm your default file manager, you'd need to change all the launchers and pointers that currently call PCMan-FM so that they point to sunflower-fm. That's another reason for the symlink - if for some reason you move the actual application somewhere else, you just need to change one symlink rather than all those pointers.
Indeed, that suggests a rather dirty hack - you could uninstall PCMan-FM and create a symlink from /usr/bin/PCMan-FM to /usr/local/bin/sunflower. I don't recommend this though
Have a look at the man file for ln to see what the correct syntax should be - or maybe search online for usage examples. But I think the way I posted is right
