def wavy_path(width, height, y_origin): half_height = height / 2 path = QPainterPath() pi2 = math.pi * 2 num = 100 num_waves = 4 wav_limit = num // num_waves sin = math.sin path.reserve(num) for i in range(num): x = width * i / num rads = pi2 * (i % wav_limit) / wav_limit factor = sin(rads) y = y_origin + factor * half_height path.lineTo(x, y) if i else path.moveTo(x, y) return path