И снова у меня проблема с исполняемыми файлами, скомпилированными PyInstaller, которые не работают так же, как скрипты Python...
Мне нужно прочитать системное разрешение экрана в моей программе, поэтому я добавил для него эту простую функцию:
# Get screen size for Linux
from gi.repository.Gdk import Screen
def GetResolution():
screenvar = Screen.get_default()
width = screenvar.get_width()
height = screenvar.get_height()
return [width, height]
При запуске с Python он работает отлично.
Однако исполняемый файл, созданный с помощью PyInstaller, потерпел крах. Сначала я подумал, что это проблема с библиотечными хуками - видел это раньше. Однако это было не так - библиотека и ее функции работают, но оказалось, что Screen.get_default() вернул NULL.
Итак, это поведение описано в документации GDK:
gdk_screen_get_default ()
Возвращает: GdkScreen или NULL, если нет отображения по умолчанию.
Для меня он успешно возвращает объект GdkScreen при запуске с Python, но возвращает NULL в исполняемом файле PyInstaller.
Итак, почему отображение по умолчанию не определяется этой функцией в исполняемом файле и как заставить его работать?
PS: у меня есть аналогичный EXE-файл, созданный PyInstaller, который отлично работает в Windows, но он использует другую библиотеку для чтения данных экрана.