Как запустить заставку Python, которая принимает ввод с клавиатуры в Ubuntu (и предпочтительно в Windows)?

Я разрабатываю небольшое приложение для домашнего использования на Python. Он должен действовать как заставка слайд-шоу, а также как примитивный менеджер изображений. У меня есть аспекты слайд-шоу и менеджера изображений (я использую Tkinter), но я еще не реализовал заставку. Итак, запуск приложения из командной строки работает нормально.

Я использую Ubuntu, и поскольку мне нужно, чтобы приложение могло принимать ввод с клавиатуры, я не думаю, что смогу использовать структуру xscreensaver/gnome-screensaver, поскольку она фиксирует все и вместо этого отображает диалоговое окно входа в систему. Я бы хотел, чтобы здесь меня опровергли (и было бы неплохо вернуться к xscreensaver после стольких лет :)).

Решение, которое я имею в виду, состоит в том, чтобы использовать PyXSS, чтобы определить, когда пользователь бездействует и управляю заставкой немного сам. Но было бы идеально найти другое, независимое от платформы решение, поскольку я хотел бы поделиться этой программой с некоторыми из моих друзей, использующих Windows.

Тогда на мои вопросы:

  1. Могу ли я каким-то образом использовать xscreensaver для запуска моей программы, но избежать обработки клавиатуры xscreensaver?

  2. Существуют ли независимые от платформы альтернативы PyXSS?

  3. Как мне добиться такой же функциональности в Windows?


person Peter Jaric    schedule 17.05.2010    source источник


Ответы (2)


Для 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 в той же папке. Если вы не можете найти его на своем компьютере, просто используйте 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"!

person Levite    schedule 18.09.2012

Ммм, есть pyhack, который позволяет вам использовать xscreensaver, доступный для Mac и Linux. Не уверен насчет модуля pyhack, но xscreensaverhack позволяет захватывать события клавиатуры и мыши.

Я слышал, что может быть библиотека Python для программирования заставки Windows. Даже если его нет, вы всегда можете использовать win32api, который поставляется с пакетом win32 python. Туториалы в интернете подскажут, какие API-функции вызывать для скринсейверов. Не уверен насчет использования pyopengl или чего-то в этом роде....

person Jason    schedule 14.09.2010
comment
Спасибо! Наконец-то ответ :) Посмотрю на pyhack! - person Peter Jaric; 15.09.2010
comment
Вот модуль заставки Python для Windows: homepage.hispeed.ch/py430/python/index .html - person dgorissen; 30.06.2011