Verwendung der Rhythmbox-Python-Konsole


13

Vielleicht ist das offensichtlich und ich vermisse es, oder vielleicht hat bereits jemand eine großartige Anleitung geschrieben und mein (scheinbar erschöpfendes) Googeln schlägt fehl, aber ich kann für mein ganzes Leben nicht herausfinden, wie ich die verdammte Python-Konsole rein bekomme rhythmbox, um alles zu tun !

Ich habe es über das Plugin-Menü aktiviert und es dann über Extras-> Python-Konsole geöffnet.

Es druckt

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

Aber alles, was ich an der Eingabeaufforderung eingebe, macht nichts ! Ich habe versucht help, ich habe versucht exit(), ich habe versucht print "hello world", nichts tut etwas!

All diese Dinge funktionieren natürlich in einer normalen Python-Konsole. Ich habe keine Ahnung, was zum Teufel der Unterschied ist! Soll ich etwas anderes tun, als die Eingabetaste zu drücken?


Ich kannte gerade "Rhythmbox-Client -h" von Terminal. +1, um auf dieses Plugin aufmerksam zu machen.
Rojan

Antworten:


8

Das Rhythmbox Plugins Writing Guide enthält mehrere Beispiele für Befehle, die Sie in der Python-Konsole verwenden können, um die Wiedergabe zu steuern und die Rhythmbox zu ändern:

  • Spielpause

    shell.props.shell_player.playpause()
  • Halt

    shell.props.shell_player.stop()
  • Nächster Titel

    shell.props.shell_player.do_next()
  • Fügen Sie der Play Queue ein Lied hinzu

    shell.add_to_queue("file://awsome_song.ogg")
  • Visualisierung anzeigen

    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)

Dies ist hilfreich, und tatsächlich hatte ich dies zuvor gefunden, aber was ich suche, ist, wie man die Konsole tatsächlich verwendet. Ist es wie eine normale Python-Konsole? Geben Sie einen Befehl ein und drücken Sie die Eingabetaste? Wenn ja, dann ist meins kaputt. Wenn ich einen Befehl eingebe und die Eingabetaste drücke, wird lediglich eine neue Zeile erstellt, ohne dass die Codezeile ausgeführt wird. Solange ich weiß, dass es kaputt ist, kann ich Hilfe suchen, um es zu reparieren. Ich wollte nur sicherstellen, dass ich nichts Dummes tue (und keine dokumentierte Verwendung finden kann!)
TJ Ellis

Das hört sich in der Tat so an, als wäre etwas kaputt. In rhythmbox-0.12.8-0ubuntu7 ohne aktivierte Plugins funktioniert die Konsole genau wie eine normale Python-Konsole print "hello world". Geben Sie z. B. ein und drücken Sie die Eingabetaste. Ich sehe dieses Problem noch nirgendwo anders gemeldet. Sie könnten also in Erwägung ziehen, einen neuen Fehler im Rhythmbox-Bug-Tracker zu öffnen .
ændrük,

1
Danke! Jetzt, wo ich weiß, dass es kaputt ist, werde ich ein bisschen mehr herumstöbern und einen Fehlerbericht einreichen.
TJ Ellis

Beachten Sie, dass Rhythmbox mindestens ab Ubuntu Trusty tahr 14.04 Python 3.4.0 einbettet. Der Befehl 'print "hello world"' ist also ein Syntaxfehler;) Verwenden Sie stattdessen die neue Python 3-Druckfunktion: 'print ("hello world")'
nealmcb 06.06.14

Beachten Sie, dass einige dieser Beispiele in Trusty nicht mehr funktionieren. Hier finden Sie einige Tipps, wie Sie anstelle von shell.add_to_queue () vorgehen sollten - obwohl dies leider viel komplizierter aussieht: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb

6

Wie bei jedem Python-Objekt können Sie mithilfe der dir () -Methode eine Menge darüber herausfinden. Dies gibt Ihnen einen guten Ausgangspunkt.

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

Sie können dann jede der interessant aussehenden Eigenschaften dir () zuweisen, z. B. 'get_player'.

Ein weiterer guter Ort, um nachzuschauen, ist, wenn Sie ein __doc__-Attribut für das Objekt sehen.

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

Das ist praktisch, wenn ich die Gorram-Konsole überhaupt zum Laufen bringen kann! Wenn ich zum Beispiel tippe dir(rb.Shell)und die Eingabetaste drücke, wird nur ein Zeilenumbruch eingefügt, und es geschieht nichts. Hat Ihre Shell OOB funktioniert? Ich habe die Standard-Rhythmbox-Installation unter Ubuntu 10.04 ... Ich kann mir nichts vorstellen, was ich geändert habe und das die Shell beschädigen würde. Meine reguläre Python-Konsole (außerhalb von RB) funktioniert einwandfrei ...
TJ Ellis

Hm, ja, meine Shell funktioniert ohne Änderungen.
Brousch

3

Heiliger Mist, ich habe gerade herausgefunden, wo das Problem liegt (2,5 Jahre später) - aus irgendeinem Grund weist meine Eingabetaste zwei verschiedenen Tastenereignissen zu, je nachdem, ob die Num-Taste aktiviert oder deaktiviert ist. Wenn die Num-Taste aktiviert ist, kehrt sie zurück KP_ENTER, und wenn die Num-Taste deaktiviert ist, kehrt sie zurückReturn . Ich habe immer die Nummernsperre aktiviert, weil ich es bevorzuge, Nummern über die Tastatur einzugeben.

Leider erkennt die Python-Konsole in Rhythmbox nur Return, dass ein Befehl ausgeführt werden soll - derKP_ENTER Ereignis wird nur durch einen Zeilenumbruch ersetzt ...

Aber einfache Lösung: Schalten Sie die Numlock-Funktion einfach aus, wenn Sie die Konsole verwenden. Ich bin auf dieses Problem in einigen anderen Anwendungen gestoßen (normalerweise in Spielen), daher werde ich nach einer besseren langfristigen Lösung suchen (vielleicht zwingen, beide Returnirgendwie zuzuordnen ) ...


1
Für den Fall, dass jemand anderes dieses Problem hat, habe ich eine langfristige Lösung gefunden: Um xmodmap -pke > ~/.Xmodmap ein benutzerdefiniertes Layout zu erstellen, fügen Sie am Ende dieser Datei eine Zeile hinzu keysym KP_Enter = Return und xmodmap ~/.Xmodmapaktivieren Sie das neue benutzerdefinierte Layout für diese Sitzung. Um es für die Zukunft automatisch auszuführen, fügen Sie Folgendes hinzu ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis,

Fluchkommentare und deren fehlende Zeilenumbrüche! Die ifhinzugefügte Anweisung .xinitrcmuss nach thenund vor Zeilenumbrüche enthalten fi.
TJ Ellis

Warum benutzt du nicht den returnSchlüssel anstelle des Schlüssels des Nummernschlosses enter?
Timo

Ich habe die Haupttaste "Enter" verwendet, nicht die im Nummernblock. Aus irgendeinem Grund machte es auch für diesen einen Unterschied, dass die Numlock-Funktion ein- und ausgeschaltet war.
TJ Ellis

CentOS 6.7, aber mit Anaconda-Python hatte die Eingabetaste auf dem NumberPad einen etwas anderen Effekt als die Eingabetaste auf der Haupttastatur. NumLock hatte keine Wirkung. Die Eingabetaste auf der Haupttastatur würde die Eingabeaufforderung ">>>" zurückgeben, die Eingabetaste auf dem Nummernblock würde jedoch eine leere Zeile zurückgeben.
RJT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.