繁体   English   中英

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

[英]How do I start a Python screensaver that takes keyboard input in Ubuntu (and preferably Windows)?

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

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

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

接下来是我的问题:

  1. 我可以通过某种方式使用xscreensaver来启动程序,但可以避免xscreensaver的键盘操作吗?

  2. 是否有PyXSS的平台无关替代品?

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

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

您可以右键单击该文件,然后选择“安装”,或将其复制到Windows?System32目录中,以使其出现在屏幕保护程序列表中!

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

我使用此设置配置(用于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':最好使用前两个字符if sys.argv[1][:2]=='/c':例如,效果很好。
  • / p# ...被多次调用(关闭配置时或预览后等),每次都返回到常规屏幕保护程序设置。 我只是将其与其他任何可能性一起丢弃(/ s / S或/ c:#除外)。 工作正常!

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

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

我听说可能有用于Windows屏幕保护程序编程的python库。 即使没有,您也可以始终使用win32 python软件包随附的win32api。 Internet上的教程将告诉您要调用屏幕保护程序的api函数。 不确定是否使用pyopengl或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM