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?
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) ...
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)
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)