2016-01-29 5 views
0

Еще раз, у меня есть проблемы с PyInstaller-скомпилированные исполняемые файлы не работают так же, как сделать питон сценарии ...Gdk.Screen.get_default() не работает после PyInstaller

мне нужно прочитать разрешение экрана системы в моей программе, поэтому я добавил эту простую функцию для этого:

# 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_screen_get_default()

Возвращает: GdkScreen, или NULL, если нет отображения по умолчанию.

Для меня он успешно возвращает объект GdkScreen при запуске с Python, но возвращает NULL в исполняемом файле PyInstaller.

Итак, почему не отображается «стандартная индикация», обнаруженная этой функцией в исполняемом файле, и как заставить ее работать?

PS: У меня есть аналогичный EXE, работающий с PyInstaller, отлично работающий в Windows, но он использует другую библиотеку для чтения данных экрана.

ответ

0

Решил проблему, используя альтернативный импорт, чтобы получить информацию о экране. Теперь моя функция выглядит следующим образом:

# Get screen size for Linux 
import gtk 
def GetResolution(): 
    window = gtk.Window() 
    screen = window.get_screen() 
    width = gtk.gdk.screen_width() 
    height = gtk.gdk.screen_height() 
    return [width, height] 

Работает как в питона сценария и в исполняемом PyInstaller, испытанные на 32-битной и 64-битной Linux Mint 17.3.

По-прежнему не знаю, что вызвало проблему с библиотекой, которую я изначально использовал.