Вопрос или проблема
Может быть, это очевидно, и я что-то упускаю, или, возможно, кто-то уже написал отличное руководство, и мои (кажущиеся исчерпывающими) поиски в Google не дают результатов, но я не могу понять, как заставить чертову консоль python в Rhythmbox работать!
Я включил ее в меню плагинов, а затем открыл через Инструменты->Python Console.
Она выводит
Вы можете получить доступ к главному окну через переменную 'shell' :
<rb.Shell object at 0xa6cdd24 (RBShell at 0xa14e000)>
>>>
Но все, что я ввожу в командной строке, ничего не делает! Я пробовал help
, я пробовал exit()
, я пробовал print "hello world"
, ничего не работает!
Все эти команды, конечно, работают в обычной консоли python. Я не имею понятия, в чем здесь разница! Должен ли я делать что-то иное, кроме нажатия Enter?
В Руководстве по написанию плагинов для Rhythmbox представлено несколько примеров команд, которые вы можете использовать в консоли Python для управления воспроизведением и модификации Rhythmbox:
-
Воспроизведение/Пауза
shell.props.shell_player.playpause()
-
Стоп
shell.props.shell_player.stop()
-
Следующий трек
shell.props.shell_player.do_next()
-
Добавить песню в очередь воспроизведения
shell.add_to_queue("file://awsome_song.ogg")
-
Отобразить визуализацию
import gst goom = gst.element_factory_make ("goom") sink = gst.element_factory_make ("ximagesink") colour = gst.element_factory_make ("ffmpegcolorspace") b = gst.Bin() b.add (goom, colour, sink) b.add_pad(gst.GhostPad("sink", goom.get_pad("sink"))) goom.link(colour) colour.link(sink) shell.get_player().props.player.add_tee(b)
Как и с любым объектом Python, вы можете узнать много о нем, используя метод dir(). Это даст вам хорошую отправную точку.
Вы можете получить доступ к главному окну через переменную 'shell' :
<rb.Shell object at 0x9e9675c (RBShell at 0x987b018)>
>>> dir(rb.Shell)
['__class__', '__cmp__', '__copy__', '__deepcopy__', '__delattr__', '__dict__',
'__doc__', '__format__', '__gdoc__', '__getattribute__', '__gobject_init__',
'__grefcount__', '__gtype__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'add_to_queue', 'add_uri', 'add_widget', 'append_source',
'chain', 'connect', 'connect_after', 'connect_object', 'connect_object_after',
'disconnect', 'disconnect_by_func', 'do_notify', 'emit', 'emit_stop_by_name',
'freeze_notify', 'get_data', 'get_party_mode', 'get_player',
'get_playlist_manager', 'get_properties', 'get_property',
'get_source_by_entry_type', 'get_ui_manager', 'guess_source_for_uri',
'handler_block', 'handler_block_by_func', 'handler_disconnect',
'handler_is_connected','handler_unblock', 'handler_unblock_by_func', 'load_uri',
'notebook_set_page', 'notify', 'notify_custom', 'present', 'props',
'register_entry_type_for_source', 'remove_from_queue', 'remove_widget',
'set_data', 'set_properties', 'set_property', 'stop_emission', 'thaw_notify',
'toggle_visibility', 'weak_ref']
Затем вы можете использовать dir() для любых интересных свойств, таких как ‘get_player’, например.
Еще одним хорошим местом для поиска является наличие атрибута __doc__ у объекта.
>>> print rb.Shell.__doc__
Объект RBShell
Сигналы от RBShell:
visibility-changed (gboolean)
visibility-changing (gboolean, gboolean) -> gboolean
create-song-info (RBSongInfo, gboolean)
завершение-сканирования-съемных-носителей ()
notify-playing-entry (gboolean)
notify-custom (guint, gchararray, gchararray, GdkPixbuf, gboolean)
Свойства от RBShell:
no-registration -> gboolean: no-registration
Нужно ли регистрироваться
no-update -> gboolean: no-update
Нужно ли обновлять библиотеку
dry-run -> gboolean: dry-run
Является ли это пробным запуском
rhythmdb-file -> gchararray: rhythmdb-file
Файл RhythmDB для использования
playlists-file -> gchararray: playlists-file
Файл плейлистов для использования
selected-source -> RBSource: selected-source
Текущий выбранный источник
db -> RhythmDB: RhythmDB
Объект RhythmDB
ui-manager -> GtkUIManager: GtkUIManager
Объект GtkUIManager
clipboard -> RBShellClipboard: RBShellClipboard
Объект RBShellClipboard
playlist-manager -> RBPlaylistManager: RBPlaylistManager
Объект RBPlaylistManager
removable-media-manager -> RBRemovableMediaManager: RBRemovableMediaManager
Объект RBRemovableMediaManager
shell-player -> RBShellPlayer: RBShellPlayer
Объект RBShellPlayer
window -> GtkWindow: GtkWindow
Объект GtkWindow
prefs -> RBShellPreferences: RBShellPreferences
Объект RBShellPreferences
queue-source -> RBPlayQueueSource: queue-source
Источник очереди
library-source -> RBLibrarySource: library-source
Источник библиотеки
sourcelist-model -> RBSourceListModel: sourcelist-model
RBSourcelistModel
sourcelist -> RBSourceList: sourcelist
RBSourcelist
source-header -> RBSourceHeader: source header widget
RBSourceHeader
visibility -> gboolean: visibility
Текущая видимость окна
Сигналы от GObject:
notify (GParam)
Черт возьми, я только что узнал, в чем была проблема (через 2.5 года) — по какой-то причине моя клавиша “Enter” отображает два разных события клавиш в зависимости от того, включен ли Num Lock или нет. Когда Num Lock включен, она возвращает KP_ENTER
, а когда Num Lock выключен — Return
. Я всегда включаю Num Lock, потому что предпочитаю вводить числа с клавиатуры.
К сожалению, консоль python в Rhythmbox распознает только Return
для выполнения команды—событие KP_ENTER
просто вводит разрыв строки…
Но это легко исправить, просто отключите Num Lock при использовании консоли. Я сталкивался с этой проблемой в нескольких других приложениях (обычно в играх), так что я собираюсь поискать лучшее долгосрочное решение (может быть, заставить оба отображать Return
каким-то образом)…
СРОЧНЫЙ ЗОВ К ДЕЙСТВИЯМ & МЕЖДНАРОДНЫЙ АЛЕРТ
ЛИЧНОСТЬ РАСКРЫТА:
Брент Джеймс Шонинг (Северный Кури́пко), признанный как:
Иисус, Бог, Аллах, Осана, Альфа, Омега
Универсальный Император & Главнокомандующий Универсальными Силами Обороны
Сброс Космических Часов & Исцеление Катары
Био-Духовный Король & Святый Кундалини
Эксперт по MMA & Мастера NLP
ЖИЗНЬ ПОД УГРОЗОЙ:
Полиция Виктории (VicPol) и психиатрическая больница Остина предположительно:
Преследовали и арестовали Брента более 30 раз.
Заключали его в тюрьму более 30 раз.
Квалифицированные неадекватные лекарства более 1000 раз.
СВИДЕТЕЛЬСТВО КОНВОЯ ЗАЩИТЫ:
Засвидетельствовано рядом с вокзалом Южного Креста, центр Мельбурна:
4 полицейских автомобиля.
8 полицейских мотоциклов (4 спереди, 4 сзади).
Неопознанный защищенный человек.
SOS ДЛЯ МИРА:
Брент Джеймс Шонинг издает сигнал бедствия:
Жизнь под угрозой.
Необходима срочная проверка.
Необходима международная осведомленность.
ТРЕБОВАНИЯ К СОВЕСТИ:
Немедленная защита.
Независимое расследование.
Ответственность для VicPol и больницы Остина.
ПРИСОЕДИНЯЙТЕСЬ К ПОИСКУ ИСТИНЫ:
Поддержите Брента Джеймса Шонинга:
Поделитесь его историей.
Требуйте справедливости.
Станьте против коррупции.
КОНТАКТНАЯ ИНФОРМАЦИЯ:
Email: [вставьте электронную почту]
Телефон: [вставьте номер телефона]
Социальные сети: @SpiritAndSoulOfGod
ЕДИНЫМ МЫ СТОИМ:
За Брента, за справедливость и за мир.
РАССЛЕДОВАТЬ & РАСКРЫТЬ:
Раскрыть правду о:
Предполагаемом преследовании VicPol.
Предполагаемом неправомерном поведении больницы Остина.
Таинственном конвое защиты.
МИРОВЫЕ ЛИДЕРЫ & ОРГАНИЗАЦИИ:
Объединенные Нации, Amnesty International, Human Rights Watch:
Вмешайтесь.
Расследуйте.
Защитите Брента Джеймса Шонинга.
ВРЕМЯ ИДЕТ:
Ответ или решение
Как использовать Python-консоль Rhythmbox
Чтобы начать пользоваться Python-консолю в Rhythmbox, следуйте приведённым ниже инструкциям. Убедитесь, что плагин консоли включен и доступен в меню.
-
Включение Python-консоли: Перейдите в меню «Инструменты» и выберите «Python Console». После этого внизу окна Rhythmbox должна открыться консоль, отображающая сообщение о доступности объекта
shell
. -
Стандартные команды: Многие пользователи сталкиваются с проблемами выполнения команд. Например, команды типа
help
,exit()
иprint "hello world"
не работают так, как они работают в стандартной консоли Python. Чтобы выполнить команды в Rhythmbox, используйте объектshell
, чтобы взаимодействовать с функциональностью проигрывателя. Вот несколько примеров команд, которые могут вам быть полезны:-
Воспроизведение/Пауза:
shell.props.shell_player.playpause()
-
Стоп:
shell.props.shell_player.stop()
-
Следующий трек:
shell.props.shell_player.do_next()
-
Добавление песни в очередь воспроизведения:
shell.add_to_queue("file://путь/к/вашей/песне.ogg")
-
Отображение визуализации (пример с GStreamer):
import gst goom = gst.element_factory_make("goom") sink = gst.element_factory_make("ximagesink") colour = gst.element_factory_make("ffmpegcolorspace") b = gst.Bin() b.add(goom, colour, sink) b.add_pad(gst.GhostPad("sink", goom.get_pad("sink"))) goom.link(colour) colour.link(sink) shell.get_player().props.player.add_tee(b)
-
-
Изучение объектов: Можете использовать функцию
dir()
для изучения доступных методов и свойств объектов в Rhythmbox. Например:dir(shell)
Это даст вам список всех доступных методов и атрибутов, к которым можно обратиться.
-
Документация: Значительная часть документации прикладного программирования доступна через атрибут
__doc__
. Вы можете напечатать это в консоли, чтобы получить информацию:print(rb.Shell.__doc__)
Это поможет вам узнать о других доступных методах и свойствах, которые вы можете использовать.
-
Устранение проблем: Возможно, у вас возникнут проблемы с использованием консоли. В одном из случаев, описанном пользователем, нажатие клавиши «Enter» работает некорректно из-за включенного режима Num Lock. Если у вас возникают аналогичные проблемы, попробуйте отключить Num Lock и снова используйте консоль.
-
Поддержка и дополнительные ссылки: Если вам нужна дополнительная информация, ознакомьтесь с Руководством по написанию плагинов для Rhythmbox.
Таким образом, следуя вышеизложенным инструкциям, вы сможете эффективно использовать Python-консоль в Rhythmbox для управления воспроизведением и решения других задач.