[Tutor] A volume control (:

Larry llwyble at cox.net
Fri Nov 21 23:21:15 EST 2003


On Sat, 22 Nov 2003 05:04:04 +0100
Michael Lange <klappnase at freenet.de> wrote:

> On Fri, 21 Nov 2003 19:59:43 -0600
> Larry <llwyble at cox.net> wrote:
> > 
> > 
> > This didn't set the current volume.  I'm not really sure what it
> > does. The variable word is a global name. It's coming after the call
> > to print. And even if I put it before the call to print, it doesn't
> > change the setting of the  scale on startup. It still starts at
> > zero.  I'm not completely sure what to do with 'variable'.   (:
> > 
> > Where can I read about 'variable' and the relationship with
> > 'IntVar()'
> > 
> > I'm pretty green at this and I don't quite grasp what's going on
> > here.
> > 
> > Thanks
> > 
> > 
> 
> 
> Hmmm,
> 
> what's wrong here....
> 
> I've written a little test script to see how the variable works:
> #############################
> 
> from Tkinter import *
> 
> class Scale_Test:
>     def __init__(self, master):
>         self.a = IntVar()
>         self.a.set(49)
>         self.s = Scale(master, from_=100, to=0, length=200, width=20,\
>                        variable=self.a, command=self.scale_cmd)
>         self.s.pack()
> 
>     def scale_cmd(self, event=None):
>         print self.a.get()
> 
>         
> def main():
>     r = Tk()
>     t = Scale_Test(r)
>     r.mainloop()
> 
> main()
> 
> ##############################
> 
> This does obviously what it should: on startup the Scale widget gets
> set to 49 and when the Scale is moved the variable changes its value.
> 
> Now, what happens in your script?
> 
> > #!/usr/local/bin/python
> > 
> > 
> > from Tkinter import *
> > 
> > import ossaudiodev
> > mixer = ossaudiodev.openmixer()
> > 
> > class VOLUME(Frame):
> >     def print_value(self, val):
> >         ival = int(val)
> >         a = (ival,ival)
> >         mixer.set(ossaudiodev.SOUND_MIXER_VOLUME, a)
> > 
> >     def createWidgets(self):
> >         self.slider = Scale(self, from_=0, to=100,
> >                             orient=HORIZONTAL,
> >                             length="3i",
> >                             command=self.print_value,
> 			      variable=self.Current_vol)
> > 
> >         self.QUIT = Button(self, text='QUIT', foreground='red',
> >         command=self.quit)
> > 
> >         self.slider.pack(side=LEFT)
> >         self.QUIT.pack(side=LEFT, fill=BOTH)
> > 
> >     def __init__(self, master=None):
> >         Frame.__init__(self, master)
> >         Pack.config(self)
> 	  #get the current volume setting:
> 	  self.Current_vol = IntVar()
> 	  self.Current_vol.set(mixer.get(ossaudiodev.SOUND_MIXER_VOLUME
> 	  ))
> >         self.createWidgets()
> > 
> > test = VOLUME()
> > test.mainloop()
> 
> Maybe the problem is here:
> 
> >>>  self.Current_vol.set(mixer.get(ossaudiodev.SOUND_MIXER_VOLUME))
> 
> Are you sure that mixer.get(ossaudiodev.SOUND_MIXER_VOLUME) returns an
> integer? With the set method you used a 2-tuple:
> 
> >>> a = (ival,ival)
> >>> mixer.set(ossaudiodev.SOUND_MIXER_VOLUME, a)

You are right of course. I didn't even think of it. Too much going on today.
But yes it returns a 2-tuple.   Arg

Thanks. I'll go back with that firmly in mind.   (:



> so maybe mixer.get(etc.) returns a tuple with the left- and right
> channel values.(like I said before, I don't know anything about
> ossaudiodev).
> 
> You might find out this if you change your __init__ like this:
> 
> >     def __init__(self, master=None):
> >         Frame.__init__(self, master)
> >         Pack.config(self)
> 	  #get the current volume setting:
> 	  self.Current_vol = IntVar()
>           cv = mixer.get(ossaudiodev.SOUND_MIXER_VOLUME)
>           print type(cv)
> 	  self.Current_vol.set(cv)
> >         self.createWidgets()
> 
> Good luck to you
> 
> Michael
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 


-- 
--------------------------------------------
[Thy] kiss is comfortless as frozen water to a starved snake.
-William Shakespeare, Troilus and Cressida



More information about the Tutor mailing list