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

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

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

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

На мои вопросы, тогда:

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

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

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

Ответы [ 2 ]

3 голосов
/ 18 сентября 2012

Для 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
)

Edit: Для его компиляции вам понадобится файл 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"!

2 голосов
/ 15 сентября 2010

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

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

...