2013-05-27 4 views
2

Я попытался написать свою собственную простую функцию для рисования градиента (только серые цвета), используя очень наивный метод (рисование последовательности линий), но actaully цвет прямоугольника, который представляет собой градиент всегда является однородным цветом (я думаю, что это самый последний цвет из цикла). Не могли бы вы объяснить мне, почему, пожалуйста? Вот код:Цвет рисованного градиента всегда равно

import Tkinter 

class testGUI: 
    def __init__(self, root): 
     C = Tkinter.Canvas(root, bg = "blue", height = 250, width = 300) 
     self.drawGradient(C, 10, 10, 100, 50) 
     C.pack() 

    def drawGradient(self, canvas, x, y, w, h): 
     for offset in range(0, w): 
      gradColor = '#%02x%02x%02x' % (x * 10, x * 10, x * 10) 
      canvas.create_line(x + offset, y, x + offset, y + h, fill = gradColor) 

root = Tkinter.Tk() 
app = testGUI(root) 
root.mainloop() 

ответ

3

цвет всегда одинаково, потому что цвет вы используете, не зависит от итерации цикла:

for offset in ... 
    gradColor = '#%02x%02x%02x' % (x * 10, x * 10, x * 10) 

Чтобы сделать это изменить, значение gradColor должен зависеть от величины offset, например:

def drawGradient(self, canvas, x, y, w, h): 
    factor = 255./w 
    for offset in range(0, w): 
     gradColor = '#%02x%02x%02x' % (offset*factor, offset*factor, offset*factor) 
     canvas.create_line(x + offset, y, x + offset, y + h, fill=gradColor) 
+0

омга ... Я просто был мой цикл, как «для й в ...», но хотел имя, чтобы быть «смещением» и забыл о й. благодаря – tobi

Смежные вопросы