Why sfml does not play the file inside a function in this python code?

cheirasacan at gmail.com cheirasacan at gmail.com
Tue May 7 16:02:00 EDT 2013


El martes, 7 de mayo de 2013 16:57:59 UTC+2, MRAB  escribió:
> On 07/05/2013 14:56, cheirasacan at gmail.com wrote:
> 
> > El martes, 7 de mayo de 2013 12:53:25 UTC+2, MRAB  escribió:
> 
> >> On 07/05/2013 10:27, cheirasacan at gmail.com wrote:
> 
> >> > from tkinter import *
> 
> >> > import sfml
> 
> >> >
> 
> >> > window = Tk()
> 
> >> > window.minsize( 640, 480 )
> 
> >> >
> 
> >> > def sonido():
> 
> >> >      file = sfml.Music.from_file('poco.ogg')
> 
> >> >      file.play()
> 
> >> >
> 
> >> > test = Button ( window, text = 'Sound test', command=sonido )
> 
> >> > test.place ( x = 10, y = 60)
> 
> >> >
> 
> >> > window.mainloop()
> 
> >> >
> 
> >> > Using Windows 7, Python 3.3, sfml 1.3.0 library, the file it is played if i put it out of the function. � what am i doing wrong ? Thanks.
> 
> >> >
> 
> >>
> 
> >> Perhaps what's happening is that sonido starts playing it and then
> 
> >> returns, meaning that there's no longer a reference to it ('file' is
> 
> >> local to the function), so it's collected by the garbage collector.
> 
> >>
> 
> >> If that's the case, try keeping a reference to it, perhaps by making
> 
> >> 'file' global (in a simple program like this one, using global should
> 
> >> be OK).
> 
> >
> 
> > Thanks. A global use of 'sonido' fix the problem. The garbage collector must be the point. But this code is part of a longer project. What can i do to fix it without the use of globals? I will use more functions like this, and i would like to keep learning python as well good programming methodology.
> 
> > Thanks.
> 
> >
> 
> Presumably the details of the window are (or will be) hidden away in a
> 
> class, so you could make 'file' an attribute of an instance.
> 
> 
> 
> Also, please read this:
> 
> 
> 
> http://wiki.python.org/moin/GoogleGroupsPython
> 
> 
> 
> because gmail insists on adding extra linebreaks, which can be somewhat
> 
> annoying.

 The reply is very useful. I will keep learning.
 Thanks for all.



More information about the Python-list mailing list