Gdk.Screen.get_default() 在 PyInstaller 之后不工作

Gdk.Screen.get_default() not working after PyInstaller

再一次,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 ()

Returns: a GdkScreen, or NULL if there is no default display.

对我来说,当 运行 和 Python 时,它成功地 returns GdkScreen 对象,但在 PyInstaller 可执行文件中 returns NULL。

那么,为什么这个函数在可执行文件中没有检测到“默认显示”,如何让它工作?

PS:我有一个类似的 PyInstaller 制作的 EXE 在 Windows 中运行良好,但它使用不同的库来读取屏幕数据。

通过使用替代导入获取屏幕信息解决了我的问题。现在我的函数看起来像这样:

# 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]

在 python 脚本和 PyInstaller 可执行文件中均有效,已在 32 位和 64 位 Linux Mint 17.3 上测试。

仍然不知道是什么导致了我原来使用的库的问题。