1

Python で家庭用の小さなアプリケーションを開発しています。スライド ショーのスクリーンセーバーとして機能するだけでなく、原始的な画像マネージャーとしても機能するはずです。スライド ショーとイメージ マネージャーの側面はカバーしていますが (私は Tkinter を使用しています)、スクリーンセーバー ビットはまだ実装していません。そのため、コマンド ラインからアプリを起動すると問題なく動作します。

私は Ubuntu を実行していますが、キーボード入力を受け入れるアプリケーションが必要なため、xscreensaver/gnome-screensaver フレームワークはすべてをキャプチャして代わりにログイン ダイアログを表示するため、使用できないと思います。ここで私が間違っていることを証明したいと思います (そして、何年も経った後に xscreensaver に戻るのはいいことです :) )。

私が考えている解決策は、PyXSSを使用してユーザーがアイドル状態であることを検出し、スクリーンセーバー ビットを自分で管理することです。しかし、このプログラムを Windows を使用している友人と共有したいので、プラットフォームに依存しない別のソリューションを見つけることが理想的です。

私の質問に進みます。

  1. xscreensaver を何らかの方法で使用してプログラムを起動し、xscreensaver のキーボード処理を回避することはできますか?

  2. PyXSS のプラットフォームに依存しない代替手段はありますか?

  3. Windowsで同じ機能を実現するにはどうすればよいですか?

4

2 に答える 2

3

Windowsの場合、実行可能ファイルを作成し (例: でpy2exe)、名前を から.exeに変更できます。.scr

そのファイルを右クリックして「インストール」を選択するか、それをあなたの (?) Windows/System32 ディレクトリにコピーして、スクリーンセーバーのリストに表示することができます!

ただし、1 つの前提として、通常の一連のファイル (依存関係) ではなく、実行可能ファイルを 1 つだけ作成するのが最善だと思います。

このセットアップ構成 (用py2exe) を使用して、1 つの実行可能ファイルを作成します。

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:# ... 構成ボタンが押されたとき。たとえば、最初の 2 文字だけを使用するのが最適な場合があります if sys.argv[1][:2]=='/c':
  • /p # ... は、一般的なスクリーンセーバー設定に戻るたびに (構成を閉じたとき、またはプレビューの後など) 何度も呼び出されます。他の可能性 (/s /S または /c:# 以外) とともにこれを破棄します。正常に動作します!

ユーザー入力:マウスの移動やキーボード イベントで自動的に終了しないため、キーボード ストロークの処理は非常に簡単ですが、これらのメソッドを自分で実装する必要があります。「on_mouse_event_close_program」関数を書くことを忘れないでください!

于 2012-09-18T16:47:59.840 に答える
2

うーん、MacとLinuxで利用できるxscreensaverを使用できるようにするpyhackがあります。pyhackモジュールについてはよくわかりませんが、xscreensaverhackを使用すると、キーボードとマウスのイベントをキャプチャできます。

Windowsスクリーンセーバープログラミング用のPythonライブラリがあるかもしれないと聞きました。ない場合でも、win32pythonパッケージに付属しているwin32apiをいつでも使用できます。インターネット上のチュートリアルでは、スクリーンセーバーを呼び出すためのAPI関数がわかります。pyopenglなどの使用についてはよくわかりません。

于 2010-09-14T21:25:20.700 に答える