web-dev-qa-db-fra.com

Comment utiliser la console python de Rhythmbox

Peut-être que c'est évident et que je ne le vois pas bien, ou peut-être que quelqu'un a déjà écrit un bon guide et que mon google (apparemment exhaustif) ne parvient pas à le produire, mais je ne parviens pas à comprendre comment obtenir le maudit python console en boîte à rythmes à faire n'importe quoi!

Je l'ai activé à partir du menu du plugin, puis je l'ouvre à l'aide de Outils-> Console Python.

Il imprime

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

Mais tout ce que je tape à l'invite fait rien! J'ai essayé help, j'ai essayé exit(), j'ai essayé print "hello world", rien ne fait rien!

Toutes ces choses fonctionnent, bien sûr, dans une console normale python. Je n'ai aucune idée de ce que diable la différence est ici! Suis-je censé faire autre chose que d'appuyer sur entrer?

13
TJ Ellis

Putain de merde, je viens de découvrir quel était le problème (deux ans et demi plus tard) - pour une raison quelconque, ma touche "Entrée" correspond à deux événements clés différents selon que le verrouillage numérique est activé ou non. Lorsque numlock est activé, il retourne KP_ENTER, et lorsque numlock est désactivé, il renvoie Return. Le verrouillage numérique est toujours activé car je préfère saisir des chiffres avec le clavier.

Malheureusement, la console python de Rhythmbox ne reconnaît que Return pour exécuter une commande - l'événement KP_ENTER entre simplement un saut de ligne ...

Mais solution facile, il suffit d’activer numlock lors de l’utilisation de la console. J'ai rencontré ce problème dans quelques autres applications (généralement des jeux), alors je vais chercher une meilleure solution à long terme (peut-être obliger les deux à mapper sur Return d'une manière ou d'une autre) ...

3
TJ Ellis

Le Guide d'écriture des plugins Rhythmbox contient plusieurs exemples de commandes que vous pouvez utiliser dans la console Python pour contrôler la lecture et modifier Rhythmbox:

  • Jouer pause

    Shell.props.Shell_player.playpause()
    
  • Arrêtez

    Shell.props.Shell_player.stop()
    
  • Piste suivante

    Shell.props.Shell_player.do_next()
    
  • Ajouter une chanson à la file d'attente

    Shell.add_to_queue("file://awsome_song.ogg")
    
  • Afficher une visualisation

    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)
    
8
ændrük

Comme pour tout objet Python, vous pouvez en apprendre beaucoup à son sujet en utilisant la méthode dir (). Cela vous donnera un bon point de départ.

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']

Vous pouvez ensuite dir () n’importe laquelle des propriétés intéressantes, comme "get_player", par exemple.

Un autre bon endroit à regarder est si vous voyez un attribut __doc__ sur l'objet.

>>> 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)
6
brousch