1

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

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

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

关于我的问题,然后:

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

  2. PyXSS 是否有独立于平台的替代方案?

  3. 我将如何在 Windows 中实现相同的功能?

4

2 回答 2

3

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

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

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

我使用此 setup-configuration (for 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 上找不到它,那么只需使用 google 找到它!

命令行操作符: 根据发生的情况(预览、设置等),有几个命令行操作符被移交。你会在这里有一个列表: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”函数!

于 2012-09-18T16:47:59.840 回答
2

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

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

于 2010-09-14T21:25:20.700 回答