Jak korzystać z konsoli Python Rhythmbox

13

Być może jest to oczywiste i brakuje mi tego, a może ktoś już napisał świetny przewodnik, a mój (pozornie wyczerpujący) googling nie udaje się go podnieść, ale nie mogę zrozumieć, jak mogę wcielić się w to, jak zdobyć konsolę Down Python rhythmbox do robienia czegokolwiek!

Włączyłem go z menu wtyczki, a następnie otwórz go za pomocą Narzędzia-> Python Console.

Drukuje

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

Ale cokolwiek piszę po znaku zachęty, nic nie robi ! Próbowałem help, próbowałem exit(), próbowałem print "hello world", nic nie robi nic!

Wszystkie te rzeczy działają oczywiście w normalnej konsoli Pythona. Nie mam pojęcia, do diabła, jaka jest różnica! Czy mam zrobić coś innego niż wciśnięcie Enter?

TJ Ellis
źródło
Po prostu znałem „rhythmbox-client -h” z terminala. +1 za poinformowanie o tej wtyczce.
Rojan

Odpowiedzi:

8

Rhythmbox Wtyczki Pisanie przewodnik ma kilka przykładów poleceń można użyć w konsoli Pythona do sterowania odtwarzaniem i modyfikują Rhythmboksa:

  • Play / Pause

    shell.props.shell_player.playpause()
  • Zatrzymać

    shell.props.shell_player.stop()
  • Następny utwór

    shell.props.shell_player.do_next()
  • Dodaj utwór do kolejki odtwarzania

    shell.add_to_queue("file://awsome_song.ogg")
  • Wyświetl wizualizację

    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)
    
ændrük
źródło
Jest to pomocne i faktycznie znalazłem to wcześniej, jednak szukam tego, jak właściwie korzystać z konsoli. Czy to jest jak zwykła konsola python; wpisz polecenie i naciśnij Enter? Jeśli tak, to moje jest zepsute. Po wpisaniu polecenia i naciśnięciu klawisza Enter tworzy on nową linię bez wykonywania wiersza kodu. Tak długo, jak wiem, że jest zepsuty, mogę szukać pomocy w jego naprawie; Chciałem tylko upewnić się, że nie robię czegoś głupiego (i nie znalazłem żadnego udokumentowanego użycia tego!)
TJ Ellis
To naprawdę brzmi, jakby coś się zepsuło. W rhythmbox-0.12.8-0ubuntu7 bez włączonych innych wtyczek konsola działa tak jak zwykła konsola Python, np. Wpisz, print "hello world"a następnie naciśnij klawisz Enter. Nigdzie indziej nie widzę tego problemu, więc możesz rozważyć otwarcie nowego błędu w narzędziu do śledzenia błędów Rhythmbox .
ændrük
1
Dziękuję Ci! teraz, gdy wiem, że jest zepsuty, zacznę jeszcze trochę grzebać i złożyć raport o błędzie.
TJ Ellis,
Zauważ, że przynajmniej od Ubuntu Trusty tahr 14.04, rhythmbox zawiera Python 3.4.0. Więc polecenie „print” hello world ”jest błędem składni;) Zamiast tego użyj nowej funkcji drukowania w Pythonie 3:„ print („hello world”) ”
nealmcb
Pamiętaj, że niektóre z tych przykładów nie działają już w Trusty. Zobacz kilka wskazówek na temat tego, co robić zamiast shell.add_to_queue () tutaj - choć wygląda to znacznie bardziej skomplikowane, niestety: mail.gnome.org/archives/rhythmbox-devel/2011-April/…
nealmcb
6

Podobnie jak w przypadku każdego obiektu Python, możesz dowiedzieć się o nim wiele, używając na nim metody dir (). To da ci dobre miejsce do rozpoczęcia.

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

Następnie możesz dir () dowolną z interesujących właściwości, na przykład „get_player”.

Innym dobrym miejscem do patrzenia jest, jeśli zobaczysz atrybut __doc__ na obiekcie.

>>> 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)
Brousch
źródło
to przydatne, jeśli mogę w ogóle uruchomić konsolę Gorram! tak jak jest, jeśli napiszę na przykład dir(rb.Shell)i wcisnę Enter, po prostu dodaje podział wiersza i nic nie robi ... Czy twoja powłoka działała OOB? Mam domyślną instalację Rhythmbox na Ubuntu 10.04 .... Nie mogę wymyślić niczego, co zmieniłem, co złamałoby powłokę. Moja zwykła konsola python (poza rb) działa dobrze ...
TJ Ellis,
Hm, tak, moja powłoka działa dobrze bez żadnych modyfikacji.
brousch
3

Cholera jasna, właśnie dowiedziałem się, na czym polega problem (2,5 roku później) - z jakiegoś powodu moje mapy klawiszy „enter” na dwa różne kluczowe wydarzenia w zależności od tego, czy numlock jest włączony czy wyłączony. Kiedy numlock jest włączony, wraca KP_ENTER, a gdy numlock jest wyłączony, wraca Return. Zawsze mam numlock włączony, ponieważ wolę wprowadzać cyfry za pomocą klawiatury.

Niestety konsola pythonowa w Rhythmbox rozpoznaje tylko Returnuruchomienie polecenia - KP_ENTERzdarzenie po prostu wchodzi w podział wiersza ...

Ale łatwa naprawa, po prostu wyłącz numlock podczas korzystania z konsoli. Zetknąłem się z tym problemem w kilku innych aplikacjach (zwykle w grach), więc zamierzam szukać lepszego długoterminowego rozwiązania (być może zmuszając oba do mapowania w Returnjakiś sposób) ...

TJ Ellis
źródło
1
W przypadku, gdy ktoś inny ma ten problem, znalazłem rozwiązanie długoterminowe: xmodmap -pke > ~/.Xmodmap aby utworzyć niestandardowy układ, a następnie na końcu tego pliku dodaj wiersz, keysym KP_Enter = Return a następnie uruchom, xmodmap ~/.Xmodmapaby włączyć nowy niestandardowy układ dla tej sesji. Aby automatycznie uruchamiał się w przyszłości, dodaj ~/.xinitrc:if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
TJ Ellis,
przeklinać komentarze i brak podziałów linii! ifoświadczenie dodany do .xinitrcpotrzeb mieć podziały wierszy po theni przed fi.
TJ Ellis,
Dlaczego nie użyjesz returnklucza zamiast klucza numlocka enter?
Timo,
Używałem głównego klawisza „Enter”, a nie tego na klawiaturze numerycznej; z jakiegoś powodu włączenie / wyłączenie numlocka zrobiło różnicę również dla tego.
TJ Ellis,
CentOS 6.7, ale z pythonem anakonda, klawisz Enter na klawiaturze numerycznej miał nieco inny efekt niż klawisz Enter na głównej klawiaturze. NumLock nie miał efektu. Główny klawisz Enter zwróci znak zachęty „>>>”, ale klawisz NumberPad Enter zwróci pusty wiersz.
rjt