Como usar o console python Rhythmbox

13

Talvez isso seja óbvio e eu esteja sentindo falta dele, ou talvez alguém já tenha escrito um ótimo guia e meu (aparentemente exaustivo) googling esteja falhando em aumentar, mas eu não consigo entender a vida de mim console python no rhythmbox para fazer qualquer coisa!

Eu o habilitei no menu do plug-in e, em seguida, abri-lo usando o Console Tools- > Python.

Imprime

You can access the main window through the 'shell' variable :
<rb.Shell object at 0xa6cdd24 (RBShell at 0xa14e000)>
>>> 

Mas qualquer coisa que eu digite no prompt faz nada ! Eu tentei help , eu tentei exit() , eu tentei print "hello world" , nada faz nada!

Todas essas coisas funcionam, é claro, em um console python normal. Eu não tenho idéia do que diabos a diferença está aqui! Eu deveria fazer algo diferente de apertar enter?

    
por TJ Ellis 04.09.2010 / 15:42

3 respostas

3

Caramba, acabei de descobrir qual era o problema (2,5 anos depois) - por alguma razão, minha tecla "enter" mapeia para dois eventos-chave diferentes, dependendo se o numlock está ativado ou desativado. Quando o numlock está ativado, ele retorna KP_ENTER e, quando o numlock está desativado, retorna Return . Eu sempre tenho um numlock, porque eu prefiro digitar números com o teclado.

Infelizmente, o console python no Rhythmbox reconhece apenas Return para executar um comando - o evento KP_ENTER simplesmente entra em uma quebra de linha ...

Mas é fácil consertar, basta desativar o numlock ao usar o console. Eu corri para este problema em alguns outros aplicativos (geralmente jogos), então eu vou olhar para uma solução melhor a longo prazo (talvez forçar ambos a mapear para Return de alguma forma) ...

    
por TJ Ellis 12.01.2013 / 16:17
8

O Guia de Escrita de Plugins do Rhythmbox tem vários exemplos de comandos que você pode usar no console do Python para controlar reproduzir e modificar o Rhythmbox:

  • Reproduzir / pausar

    shell.props.shell_player.playpause()
    
  • Pare

    shell.props.shell_player.stop()
    
  • Próxima faixa

    shell.props.shell_player.do_next()
    
  • Adicione uma música à Fila do Play

    shell.add_to_queue("file://awsome_song.ogg")
    
  • Exibir uma visualização

    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)
    
por ændrük 04.09.2010 / 17:52
6

Como acontece com qualquer objeto Python, você pode descobrir muito sobre isso usando o método dir () nele. Isso lhe dará um bom lugar para começar.

You can access the main window through the 'shell' variable :
<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']

Você pode então dir () qualquer uma das propriedades de aparência interessante, como 'get_player', talvez.

Outro bom lugar para procurar é se você ver um atributo __doc__ no objeto.

>>> print rb.Shell.__doc__
Object RBShell

Signals from RBShell:
  visibility-changed (gboolean)
  visibility-changing (gboolean, gboolean) -> gboolean
  create-song-info (RBSongInfo, gboolean)
  removable-media-scan-finished ()
  notify-playing-entry (gboolean)
  notify-custom (guint, gchararray, gchararray, GdkPixbuf, gboolean)

Properties from RBShell:
  no-registration -> gboolean: no-registration
    Whether or not to register
  no-update -> gboolean: no-update
    Whether or not to update the library
  dry-run -> gboolean: dry-run
    Whether or not this is a dry run
  rhythmdb-file -> gchararray: rhythmdb-file
    The RhythmDB file to use
  playlists-file -> gchararray: playlists-file
    The playlists file to use
  selected-source -> RBSource: selected-source
    Source which is currently selected
  db -> RhythmDB: RhythmDB
    RhythmDB object
  ui-manager -> GtkUIManager: GtkUIManager
    GtkUIManager object
  clipboard -> RBShellClipboard: RBShellClipboard
    RBShellClipboard object
  playlist-manager -> RBPlaylistManager: RBPlaylistManager
    RBPlaylistManager object
  removable-media-manager -> RBRemovableMediaManager: RBRemovableMediaManager
    RBRemovableMediaManager object
  shell-player -> RBShellPlayer: RBShellPlayer
    RBShellPlayer object
  window -> GtkWindow: GtkWindow
    GtkWindow object
  prefs -> RBShellPreferences: RBShellPreferences
    RBShellPreferences object
  queue-source -> RBPlayQueueSource: queue-source
    Queue source
  library-source -> RBLibrarySource: library-source
    Library source
  sourcelist-model -> RBSourceListModel: sourcelist-model
    RBSourcelistModel
  sourcelist -> RBSourceList: sourcelist
    RBSourcelist
  source-header -> RBSourceHeader: source header widget
    RBSourceHeader
  visibility -> gboolean: visibility
    Current window visibility

Signals from GObject:
  notify (GParam)
    
por brousch 04.09.2010 / 21:01