Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Cairo-Dock cafe | Café Cairo-Dock Le vrai post sur l'apprentissage de dbus et de python + 3615 ma vie
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Cairo-Dock cafe | Café Cairo-Dock

Subjects Author Language Messages Last message
[Locked] Le vrai post sur l'apprentissage de dbus et de python + 3615 ma vie
Page : 1 2 3 4 5 6 7
taiebot65 Français 138 taiebot65 [Read]
16 May 2010 à 20:46

taiebot65, Wednesday 04 November 2009 à 22:49


Subscription date : 26 October 2008
Messages : 1904
C'est toujours la meme chose que le post d'au-dessus....

fabounet, Thursday 05 November 2009 à 10:03


Subscription date : 30 November 2007
Messages : 17118
ah oki, je pense que le mieux c'est d'utiliser la méthode AddSubIcons, et de récupérer l'objet org.cairodock.CairoDock.subapplet, puis de l'utiliser comme l'objet org.cairodock.CairoDock.applet pour agir sur les icônes du sous-dock.

taiebot65, Saturday 07 November 2009 à 22:31


Subscription date : 26 October 2008
Messages : 1904
waouhh j'ai decouvert d-feet pour regarder les commandes dbus de tous les programmes connectes c'est un tres bon projet pour voir les commandes que l'on peut faire et que l'on peut controler ... meme un peut trop complet pour moi
https://fedorahosted.org/d-feet/

matttbe, Saturday 07 November 2009 à 23:02


Subscription date : 24 January 2009
Messages : 12573
Excellent outil, merci pour le partage

taiebot65, Sunday 08 November 2009 à 18:12


Subscription date : 26 October 2008
Messages : 1904
C'est bizarre j'ai plein de time out sur RegisterNewModule
CAD je lance une fois mon programme il marche pas je reessaie il marche
(ps je suis toujours sur l'ancienne version donc c'est peut etre deja fixe...)

fabounet, Monday 09 November 2009 à 12:23


Subscription date : 30 November 2007
Messages : 17118
tu lances comment l'applet ? c'est le dock qui la lance automatiquement ?

matttbe, Monday 09 November 2009 à 14:50


Subscription date : 24 January 2009
Messages : 12573
Tu as quoi exactement comme message ? Car ppmt avait un problème également.

taiebot65, Saturday 14 November 2009 à 13:53


Subscription date : 26 October 2008
Messages : 1904
Bon toujours en train de m'amuser avec python et dbus j'aimerais comprendre comment faire pour executer une commade toutes les x secondes ou millisecondes...

Je voudrais donner l'impression d'un CD qui tourne sans faire perdre trop de CPU donc il me faut une boucle et puis j'ai pense a quatres images se repetant d'un CD a intervalle regulier cela pourrait donner l'impression de rotation...

Pour l'instant c'est a l'etat de test mais je pense qu'avec plein d'images de CD cette impression pourrait le faire en reduisant au max la conso CPU..




#!/usr/bin/env python
#
# main.py
# Copyright (C) taiebot 2009 <taiebot65@ sjfnsdk - yahoo - jfskdjnv .fr> <- SPAM !!!!!

# main.py is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# main.py is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.

# You should have received a copy of the GNU General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.
### import ###
import sys
import gobject
import glib
import gtk
import dbus
from dbus
.mainloop.glib import DBusGMainLoop

            
#On va active Pidgin et on ecoute son interface.

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus dbus.SessionBus()



remote_object bus.get_object("org.cairodock.CairoDock","/org/cairodock/CairoDock")
iface dbus.Interface(remote_object"org.cairodock.CairoDock")

i=0
while i<1000
    
iface.SetIcon("~/Images/CD1.svg""none""Rhythmbox","none")
    
iface.SetIcon("~/Images/CD2.svg""none""Rhythmbox","none")
    
iface.SetIcon("~/Images/CD3.svg""none""Rhythmbox","none")
    
iface.SetIcon("~/Images/CD4.svg""none""Rhythmbox","none")
    
i1


loop 
gobject.MainLoop()
loop.run()


taiebot65, Saturday 14 November 2009 à 14:28


Subscription date : 26 October 2008
Messages : 1904
Une petite video bon les images devraient etres retravaillees parce que l'on a l'impression que le cd saute...

http://videobin.org/+lz/pw.html

matttbe, Saturday 14 November 2009 à 17:06


Subscription date : 24 January 2009
Messages : 12573
Pas mal . Mais perso, j'aurais fait un gif animé

taiebot65, Saturday 14 November 2009 à 17:16


Subscription date : 26 October 2008
Messages : 1904
Cairo-dock supporte les gif??

fabounet, Monday 16 November 2009 à 11:00


Subscription date : 30 November 2007
Messages : 17118
pour executer une commade toutes les x secondes ou millisecondes...

tu utilises un g_timeout (une fonction de la GLib, la syntaxe exacte en python je ne sais pas )

taiebot65, Thursday 03 December 2009 à 22:47


Subscription date : 26 October 2008
Messages : 1904
toujours dans ma recherche sur python je suis sur du code que je comprends pas du moins que j'arrive pas a faire marcher... ..

J'ai retrouve la version de spectrolet en python pure donc on a pas besoin de screenlet pour l'installer mais celle-ci n'est plus supporte par la version de python il me dit que

/home/taiebot/Bureau/Spectrolet-0.1a1-r10/Spectrolet.py:210: DeprecationWarning: os.popen3 is deprecated. Use the subprocess module.
audio_stream = os.popen3( "pacat -r -d %s" % device )


donc avec le code suivant


usr
/bin/env python
#
#+   Copyright (c) 2009 Ian Halpern
#@   http://Spectrolet.com
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

import ossysgtkcairotimerandomstructsignalgobject
from gtk import gdk
from threading import Thread

from numpy import 
*

if 
gtk.pygtk_version < ( 29):
    print 
"PyGtk 2.9.0 or later required"
    
raise SystemExit

CHUNK 
1024    # audio stream buffer size

BITS 16
CHANNELS 
2

keep_processing 
True

audio_sample 
""
pixmap None

peak_heights 
= [ for i in range32 ) ]
total_peak_heights = [ for i in range257 ) ]

# This is called when we need to draw the windows contents
def expose widgetevent=None ):
    global 
pixmap

    widget
.window.draw_drawablewidget.window.new_gc( ), pixmap,
        
# Only copy the area that was exposed.
        
event.area.xevent.area.y,
        
event.area.xevent.area.y,
        
event.area.widthevent.area.height )
    return 
True


def draw 
( ):
    global 
audio_samplepixmap

    
#audio_sample = ""

    
if not audio_sample:
        
audio_sample ""

        
#for x in range( CHUNK ):
        #    audio_sample += chr( int( random.random( ) * 256 ) )

    
audio_sample_str audio_sample.ljustCHUNKchr0x00 ) )

    
audio_sample_array = [ ]

    for 
i in rangeCHUNK / ( ( BITS CHANNELS ) / ) ):

        
avg_amp 0.0

        
for n in rangeCHANNELS ):
            
amp 0

            
for c in rangeBITS ):
                
amp += ordaudio_sample_str+ ( BITS ) + ] ) << ( )

            
amp = ( amp ** ( BITS ) ) % ** BITS ** ( BITS )

            
avg_amp += amp

        avg_amp 
/= CHANNELS

        audio_sample_array
.appendavg_amp )

    
fft_array fft.fft( array( audio_sample_array ) )

    
ffted_array = [ ]

    
1

    
for x in fft_array:
        
+= 1

        
if total_peak_heights] < sqrtx.real ** x.imag ** ):
            
total_peak_heights] = sqrtx.real ** x.imag ** )


        
ffted_array.appendsqrtx.real ** x.imag ** ) / total_peak_heights] )

    
lenffted_array ) / 4

    
#gdk.threads_enter( )
    
widthheight pixmap.get_size( )
    
#gdk.threads_leave( )

    
cst cairo.ImageSurfacecairo.FORMAT_ARGB32widthheight )

    
cr cairo.Contextcst )

    
# start drawing spectrum

    
n_bars 32
    bar_width 
16
    bar_spacing 
1

    
for i in range1ln_bars ):

        
cr.set_source_rgba0.00.61.00.8 )
        
#bar_amp_norm = audio_sample_array[ i ]

        
bar_amp_norm ffted_array]

        
bar_height bar_amp_norm height 3

        peak_index 
int( ( ) / ( n_bars ) )
        
#print peak_index

        
if bar_height peak_heightspeak_index ]:
            
peak_heightspeak_index ] = bar_height
        
else:
            
peak_heightspeak_index ] -= 3

        
if peak_heightspeak_index ] < 3:
            
peak_heightspeak_index ] = 3

        
for j in range0intbar_height ) ):
            
cr.rectangle(
                ( 
bar_width bar_spacing ) * ( / ( n_bars ) ),
                
height 3,
                
bar_width,
                -
2
            
)

        
cr.fill( )

        
cr.set_source_rgba1.00.00.00.8 )
        
cr.rectangle(
            ( 
bar_width bar_spacing ) * ( / ( n_bars ) ),
            
height intpeak_heightspeak_index ] ),
            
bar_width,
            -
2
        
)

        
cr.fill( )

    
cr.fill( )
    
cr.stroke( )

    
# end drawing

    #gdk.threads_enter( )

    
cr_pixmap pixmap.cairo_create( )

    
cr_pixmap.set_source_rgba1.01.01.00.0 # Transparent
    # Draw the background
    
cr_pixmap.set_operatorcairo.OPERATOR_SOURCE )
    
cr_pixmap.paint( )

    
cr_pixmap.set_source_surfacecst0)
    
cr_pixmap.paint( )

    
#gdk.threads_leave( )

    
return False

def screenChanged 
widgetold_screen=None ):

    
# To check if the display supports alpha channels, get the colormap
    
screen widget.get_screen( )
    
colormap screen.get_rgba_colormap( )
    
# Now we have a colormap appropriate for the screen, use it
    
widget.set_colormapcolormap )

    return 
False

def timerExecFrame 
win ):
    global 
pixmap

    draw
( )

    
widthheight pixmap.get_size( )
    
win.queue_draw_area00widthheight )
    
win.window.process_updatesTrue )

    return 
True

def discontinueProcessing 
( ):
    global 
keep_processing
    keep_processing 
False
    
return 0

def captureAudio 
( ):
    global 
keep_processingaudio_sample

    device 
os.popen"pactl list | grep monitor" ).readline( ).strip( )[len"Name: " ):]

    
audio_stream os.popen3"pacat -r -d %s" device )

    while 
keep_processing:
        
audio_sample audio_stream].readCHUNK )

    for 
stream in audio_stream:
        
stream.close( )

    print 
"\ncaptureAudio Thread Die..."

def animationLoop win ):
    global 
keep_processing

    
while keep_processing:
        
timerExecFramewin )
        
time.sleep1.0 30 )

    print 
"\nanimationLoop Thread Die..."

#def triggerRedraw ( win ):
#    width, height = win.get_size( )
#    win.queue_draw_area(0, 0, width, height)
#    win.window.process_updates( True )


def main(args):
    global 
keep_processingpixmap

    gdk
.threads_init( )
    
gdk.threads_enter( )


    
width 544
    height 
100

    screen 
gdk.screen_get_default( )

    
win gtk.Window( )

    
win.set_title'Spectrumize' )
    
win.set_default_sizewidthheight )

    
win.stick( )
    
win.set_keep_belowTrue )
    
win.set_decoratedFalse )
    
win.set_skip_taskbar_hintTrue )
    
#win.set_gravity( gdk.GRAVITY_CENTER )

    
win.connect'delete-event'gtk.main_quit )
    
win.connect'expose-event'expose )
    
win.connect'screen-changed'screenChanged )

    
# initialize for the current display
    
screenChangedwin )
    
# Run the program
    
win.show_all( )

    
pixmap gdk.Pixmapwin.windowwidthheight, -)

    
# Tell GTK+ that we want to draw the windows background ourself.
    
win.set_app_paintable(  True )
    
win.set_double_bufferedFalse )

    
screen_rect screen.get_monitor_geometry)

    
win.movescreen_rect.width width screen_rect.xscreen_rect.height height screen_rect.y  )


    
ca_thread Threadtarget=captureAudio )
    
ca_thread.start( )

    
gobject.timeout_add33timerExecFramewin )

    try:
        
gtk.main( )
    
except KeyboardInterrupt:
        
pass

    gdk
.threads_leave( )

    
discontinueProcessing( )

    
ca_thread.join( )

    print 
"Main Thead Die..."
    
return True

if __name__ == '__main__':

    try:
        
import ctypes
        libc 
ctypes.CDLL('libc.so.6')
        
libc.prctl(15sys.argv], 000)
    
except:
        
pass

    
#signal.signal( signal.SIGINT, discontinueProcessing )
    
sys.exit( mainsys.argv ) )



Il faudrait remplacer


def captureAudio 
( ):
    global 
keep_processingaudio_sample

    device 
os.popen"pactl list | grep monitor" ).readline( ).strip( )[len"Name: " ):]

    
audio_stream os.popen3"pacat -r -d %s" device )

    while 
keep_processing:
        
audio_sample audio_stream].readCHUNK )

    for 
stream in audio_stream:
        
stream.close( )



parce que os.popen() et os.popen3() ne sont plus supportes .. donc faudrait les remplacer par

http://docs.python.org/library/subprocess.html#subprocess-replacements

moi je suis paume mais ca serait un bon debut pour avoir un spectre de musique dans le dock...si quelqu'un pouvait m'aider..

ppmt, Friday 04 December 2009 à 01:33


Subscription date : 29 November 2007
Messages : 3520
Ben deja il faut importer le module subprocess

from subprocess import Popen


subprocess apparement contient un class Popen qui te permet de remplacer entre autre popen et popen3

os.popen( "pactl list | grep monitor" )

deviendrait

Popen("pactl list | grep monitor", shell=True)


par contre pour le reste tu va devoir bidouiller un peu car Popen ne connait pas readline

sinon quel version de Python tu utilises?

taiebot65, Friday 04 December 2009 à 22:36


Subscription date : 26 October 2008
Messages : 1904
2.6.4 ...

MAis c'est vraiment hors de porte j'ai l'impression..

ppmt, Friday 04 December 2009 à 23:05


Subscription date : 29 November 2007
Messages : 3520
comment ca hors de porte?

je ne comprends pas ce que tu veux dire?

Voila ce que ca donne dans un CLI de python.

>>>import subprocess
>>> subprocess.Popen("pactl list | grep monitor", shell=True)
<subprocess.Popen object at 0x7f4b15a3fcd0>
>>> Monitor Source: alsa_output.pci-0000_00_07.0.analog-stereo.monitor
Name: alsa_output.pci-0000_00_07.0.analog-stereo.monitor
device.class = "monitor"


ce n'est pas complique ensuite d'extraire la ligne qui t'interresse....j'essaierais ce soir et je te tiens au courant.

taiebot65, Friday 04 December 2009 à 23:26


Subscription date : 26 October 2008
Messages : 1904
Le probleme c'est qu'il y a l'autre aussi...

device = os.popen( "pactl list | grep monitor" ).readline( ).strip( )[len( "Name: " ):]

audio_stream = os.popen3( "pacat -r -d %s" % device )

si je comprends bien il trouve bien tout mais apres je sais pas quoi en faire il faut que os.popen3 reconnaisse aussi pactL

eption in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.
target(*self.args, **self.kwargs)
File "./Spectrolet.py", line 210, in captureAudio
audio_stream = subprocess.Popen( "pactl -r -d %s" %device)
File "/usr/lib/python2.6/subprocess.py", line 621, in init
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1126, in _execute_child
raise child_exception
OSError: [Errno 2] Aucun fichier ou dossier de ce type

    Moniteur de la source : alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
    Nom : alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
        device.class = "monitor"

taiebot65, Saturday 20 February 2010 à 22:24


Subscription date : 26 October 2008
Messages : 1904
Bon allez reouverture pour un nouveau devloppement de plugin Taskbar in sous-dock

Bon j'ai peut etre encore sous-estime la difficulte mais bon il semble plus facile que Pidgin...

taiebot65, Saturday 20 February 2010 à 23:12


Subscription date : 26 October 2008
Messages : 1904
Aller 1ere version j'affiche le nom de la class, le nom de l'appli, le nom de la fenetre de toutes les fenetres d'ouvertes ca fait beaucoup pour une seule et meme fenetre mais on ne sait jamais ca pourra servir pour plus tard et il faut que je trouve comment regrouper toutes ces infos dans un seul group


#!/usr/bin/env python
# taskbar.py v0.000001 on est meme pas connecte au dock :-(
# Copyright (C) taiebot 2009 <taiebot65  at  yahoo.fr>

# taskbar.py is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# main.py is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.

# You should have received a copy of the GNU General Public License along
# with this program.  If not, see <http://www.gnu.org/licenses/>.

import gtkwnckos

#Le seul qui marche pas car le type n'est pas defini... la fenetre active n'est pas une fenetre??? 
# define event-handlers
#def active_window_changed(screen,window):
#    status = window.get_name()
#    print "Fenetre active: " 
#    pass

#on definit tous les elements fenetres,applis,task et on les affichent

def window_opened(screenwindow):
    
ouverte window.get_name()
    print 
"Fenetre ouverte: " ouverte
    pass

def window_closed
(screenwindow):
    
ferme window.get_name()
    print 
"Fenetre ferme: " ferme
    pass

def application_opened
(screenapplication):
    
Appli_ouverte application.get_name()
    print 
"Application ouverte: " Appli_ouverte

def application_closed
(screenapplication):
    
Appli_ferme application.get_name()
    print 
"Application ferme: " Appli_ferme

def class_group_opened
(screenclass_group):
    
Class_ouverte class_group.get_name()
    print 
"Class ouverte: " Class_ouverte

def class_group_closed
(screenclass_group):
    
Class_ferme class_group.get_name()
    print 
"Class ferme: " Class_ferme

# Evenements qui changent le status... 
screen wnck.screen_get_default()
#screen.connect("active_window_changed", active_window_changed)
screen.connect("window_opened"window_opened)
screen.connect("window_closed"window_closed)
screen.connect("application_opened"application_opened)
screen.connect("application_closed"application_closed)
screen.connect("class_group_opened"class_group_opened)
screen.connect("class_group_closed"class_group_closed)



# start gtk's main-loop
gtk.main()


taiebot65, Saturday 20 February 2010 à 23:48


Subscription date : 26 October 2008
Messages : 1904
Est ce que Dbus permet le permet d'afficher des icones si on lui mets des pixbuf..

<gtk.gdk.Pixbuf object at 0xb754ab44 (GdkPixbuf at 0x9403f30)>

Cairo-Dock cafe | Café Cairo-Dock

Subjects Author Language Messages Last message
[Locked] Le vrai post sur l'apprentissage de dbus et de python + 3615 ma vie
Page : 1 2 3 4 5 6 7
taiebot65 Français 138 taiebot65 [Read]
16 May 2010 à 20:46


Glx-Dock / Cairo-Dock List of forums Cairo-Dock cafe | Café Cairo-Dock Le vrai post sur l'apprentissage de dbus et de python + 3615 ma vie Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.