Итак, для начала делаем
в получившуюся директорию dist копируем изображение. Запускаем (через консоль что бы видеть тексты ошибок), ругается на отсутствующий модуль atexit, но это не беда, руками указываем cx_Freeze подгружать и его:
cxfreeze.bat --include-modules atexit course.py
В результате программа запустится, но окна не видно. Далее начинаем отладку для разбора что же за гадость такая происходит, смотрим ваш код. В конструкторе главного класса (=класса главного окна программы) 2 метода, в результате манипуляций с ними выясняем что если убрать все что связанно с изображением: метод loadImage и self.resize(self.img.width(), self.img.height()) в initUI, то окно появляется. Если вернуть метод loadImage, а в initUI руками задать размеры окна, то окно появляется но без изображения. Отсюда делаем вывод что какие то проблемы вокруг изображения, вставляем для отладки строчку
print self.img.width(), self.img.height()
и видим что в обычном запуске размеры изображения 438, 307 , а в случае с cx_Freeze 0, 0 . Вот где собака зарыта - изображение либо не загружается, либо что то еще,но связанное с ним.
Попытка подсмотреть разницу в импоритируемых модулях при запуске через python и cx_Freeze, с последующим указанием их последнему не увенчалась успехом.
Где закралась проблема - не знаю и пока идей нет. Может кто еще подскажет?