El martes, 7 de mayo de 2013 16:57:59 UTC+2, MRAB escribió: > On 07/05/2013 14:56, cheirasa...@gmail.com wrote: > > > El martes, 7 de mayo de 2013 12:53:25 UTC+2, MRAB escribió: > > >> On 07/05/2013 10:27, cheirasa...@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. -- http://mail.python.org/mailman/listinfo/python-list