2012-12-15 50 views
0

我的滑塊不會更改我給它的參數的值。滑塊移動,但值不會更改。這裏的進口是'溫度',我需要根據滑塊2進行調整。滑塊不會更改VPython中的值

此外,winsound不會播放任何東西,我的滑塊也不會被標記。這裏發生了什麼?

import winsound 
import pygame 
import time 
from visual.controls import * 
from visual.graph import * 
from math import * 

temperature = 50 
funct1 = gcurve(color=(temperature*0.04, (temperature*0.04)-2, (temperature*0.04)-2)) 

for x in arange (0., 100.1, 0.1): 
    funct1.plot(pos=(x,5.*cos(2.*x))) 
def setdir(direction): 
    cube.dir = direction 

def setrate(obj): # called on slider drag events 
    cuberate(obj.value) # value is min-max slider position 

def cuberate(value): 
    cube.dtheta = 2*value*pi/1e3 

def woosh(sound): 
    winsound.playsound('%s.wav' % sound, winsound.sphere.wav) 


x=0 
y=0 
z=0 
w = 350 

display(x=w, y=0, width=w, height=w, range=1.5, forward=-vector(0,0,1), newzoom=1) 

c = controls(x=0, y=0, width=w, height=w, range=60) 

ctrl = slider(pos=(-50,20), width=7, length=100, axis=(1,0,0), text='Temperature', min=0., max=100., value=temperature) 
s1 = slider(pos=(-50,40), width=7, length=100, axis=(1,0,0), text='Angular Velocity', action=lambda: setrate(s1)) 

cube = sphere(color=(temperature*0.04, (temperature*0.04)-2, (temperature*0.04)-2), material=materials.rough, pos=(x,y,z)) 
sphere.velocity = vector(x,y,z) 

setrate(s1) 
setdir(-1) 

side = .4 
thk = 0.3 

t=0 
dt=0.1 
while True: 
    rate(100) 
    cube.p = vector (sin(t*0.02*temperature),sin(t*0.03*temperature),sin(t*0.04*temperature)) 
    cube.rotate(axis=(0,1,0), angle=cube.dir*cube.dtheta) 
    t = t + dt 
    cube.pos = cube.p*sin(t*temperature/100)/5 
    woosh  
    if not (side > cube.x > -side): 
     cube.p.x = -cube.p.x 
    if not (side > cube.y > -side): 
     cube.p.y = -cube.p.y 
    if not (side > cube.z > -side): 
     cube.p.z = -cube.p.z 

回答

0

我認爲這是字面值字母「s」的疏忽。將valuevalues排成一行ctrl:

ctrl = slider(pos=(-50,20), width=7, length=100, axis=(1,0,0), text='temperature', min=0, max=50, values = temperature)