Hi @William_Cleveland. (Not THE data visualisation William Cleveland? If so, very cool. If not, still cool.)
You shouldn't specify timing values in seconds if you want precise control like this. PsychoPy synchronises with the discrete hardware screen refresh cycle. It is unlikely that specifying a time like '0.167' in seconds would match the desired screen refresh onset exactly. Timing via frame counting is very precise but software timers can't be used to precisely synchronise with that fixed hardware cycle.
I'm guessing what you actually want is to specify that the image should come on at
frame N 10 (as 0.167 s is approx 10 × 1/60 s) and have a
duration (frames) of 1 (aprox. 16.66 ms). In the current specification, it is possible that the image could be on for a variable period, up to three frames (50 ms).
You have specified that the image file is constant. This means that it will be loaded from disk before the experiment even begins, and so there shouldn't be any issues with it being ready in time to draw to the screen for just a short presentation period. i.e., being pre-loaded, it can be drawn to the screen instantly and should be able to be displayed for just one frame without issue. Timing issues can arise when loading new images on every trial: this does take finite time to achieve, and so some care is needed to import it during a suitable period (like when a pre-trial fixation cross is being displayed), so that no delays are apparent.
Your image is appearing skewed as you are specifying its size as [0.5, 0.5], which is likely in
norm units (normalised to the screen dimensions). i.e. the image will be sized as half the screen width and half the screen height. If the screen aspect ratio doesn't match the image's aspect ratio, this will cause skewing. Check here http://www.psychopy.org/general/units.html for other units options you have available to choose from, which allow you to scale the image in absolute terms, or just relative to one dimension of the screen (height).
Lastly, the fact that the image is being scaled can also be an issue. It is unwise to display multi-megapixel images when you are wanting real-time control. It can take much longer to import and decompress them from disk, and they take up much more memory. For speed and memory efficiency, it is best to pre-scale your images to match the resolution that they will be shown on screen. e.g. if your screen is just 1024 × 768 and you want to display an image taken from a camera full-screen, scale it to 1024 × 768 before feeding it to PsychoPy. The other multi megapixels won't be visible on screen at all yet can still cause substantial performance and memory problems.