如何启动在Ubuntu(最好是Windows)中接受键盘输入的Python屏幕保护程序?

时间:2010-05-17 09:50:52

标签: python windows ubuntu screensaver

我正在开发一个用于Python的家庭小应用程序。它应该充当幻灯片放映屏幕保护程序,但也作为原始图像管理器。我有幻灯片放映和图像管理器方面(我正在使用Tkinter),但我还没有实现屏幕保护程序。因此,从命令行启动应用程序可以正常工作。

我正在运行Ubuntu,因为我需要应用程序才能接受键盘输入我不认为我可以使用xscreensaver / gnome-screensaver框架,因为它捕获所有内容并显示登录对话框。我很想在这里被证明是错的(经过这么多年后回到xscreensaver会很好:))。

我想到的解决方案是使用PyXSS来检测用户何时空闲并自行管理屏幕保护程序。但是,找到另一个独立于平台的解决方案是理想的,因为我想与我的一些使用Windows的朋友分享这个程序。

关于我的问题,然后:

  1. 我可以用某种方式使用xscreensaver吗? 启动我的程序,但避免使用xscreensaver 键盘处理?

  2. 是否存在与平台无关的问题 PyXSS的替代品?

  3. 我将如何实现这一目标 Windows中的相同功能?

2 个答案:

答案 0 :(得分:3)

对于 Windows ,您只需创建一个可执行文件(例如py2exe),然后将其从.exe重命名为.scr

您可以右键单击该文件并选择“安装”或将其复制到(?)Windows / System32目录中,以便显示在屏幕保护程序列表中!

虽然有一个假设:我认为最好只创建一个可执行文件而不是常规文件堆(=依赖项)。

我使用此setup-configuration(对于py2exe)来创建一个可执行文件:

from distutils.core import setup
import py2exe

includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter','MSVCP90.dll']
packages = []
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                'tk84.dll']

setup(
    options = {"py2exe": {"compressed": 2,
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 1,
                          "dist_dir": "dist",
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                         }
              },
    zipfile = None,
    windows=['main.py'] # <- the name of your code file
)

编辑: 要编译它,您需要在同一文件夹中的MSVCP90.dll文件。如果您在PC上找不到它,那么只需使用谷歌查找它!

命令行操作员: 根据发生的情况(预览,设置等),有几个命令行操作员被移交。你会在这里有一个清单: http://www.wikihow.com/Convert-an-Executable-File-Into-a-Screensaver

可悲的是,所写的内容并非都是正确的,所以简而言之:

  • / s / S ...屏幕保护程序启动时(预览时其中一个)
  • / c:# ...按下配置按钮时。最好只使用前两个字符 例如if sys.argv[1][:2]=='/c':效果很好。
  • 每次返回到常规屏幕保护程序设置时,
  • / p# ...会多次调用(当您关闭配置或预览后等等)。我只是放弃了这个以及任何其他可能性(除了/ s / S或/ c:#)。工作正常!

用户输入:处理键盘笔划非常简单,因为它不会在鼠标移动或键盘事件时自动退出,但您必须自己实现这些方法!所以不要忘记写下你的“on_mouse_event_close_program”函数!

答案 1 :(得分:2)

嗯,那里有pyhack,它允许你使用适用于Mac和Linux的xscreensaver。不确定pyhack模块,但xscreensaverhack允许您捕获键盘和鼠标事件。

我听说可能有一个用于Windows屏保编程的python库。即使没有,你也可以随时使用win32 python包附带的win32api。互联网上的教程将告诉您哪些api函数可以调用屏幕保护程序。不确定使用pyopengl或类似的东西......