Python- potrebujem majhno pomoč

Na faksu imamo za narediti domačo nalogo:

Uporabi grafično knjižico TKinter v Pythonu in izdelaj program, ki bo predstavil zaporedje
fibonnacijevih stevil v obliki grafičnih vzorcev. Uporabi svojo domišljijo in v razmerju vrste, ali
njene kombinacije (zlati rez...) na Canvas z velikostjo 800x600 razporedi vsaj 100 različnih
elementov v 12 različnih barvah, ki naj izhajajo iz Newtnovega barvnega kroga. Pri tem uporabi
osnovne metode razreda Canvas (linija, krog, kvadrat, tekst).

Za to nalogo uporabljamo knjižni TkInter, okno, elemente in da se mi 100 izrišejo tudi znam naredit, zanima me samo kako bi to izpeljav z barvami?

8 odgovorov

from Tkinter import*

root=Tk()

okno=Canvas(root, width="800", height="600")
okno.pack()
x1=50
y1=15
x2=100
y2=15
x3=125
y3=45
x4=140
y4=75

def main():

n = 15
fibonacci(n)

def fibonacci(n):
a,b = 0,1
for i in range(0,n):

okno.create_line(x1+a,y1*a,x2+a,y2*a, fill="red")
okno.create_rectangle(x3+a,y3,x4+a,y4, fill="red")  
a,b, = b,a+b

main()
root.mainloop()

To je koda, sam zdej mi ni jasno kam nj kam vstavm :D

PyTk sprejema za barve tudi hex rgb, kot HTML na primer.. zdej moraš nekako sproti računat barve "Newtnovega barvnega kroga" (nisem gledal kaj je to) in jih pretvarjat v ta zapis. ter vstavljat tam v loopu.. drug najbrž manj zaželjen način je da barve vnaprej izračunaš ali nekje najdeš in vstaviš v nek list [ ... ] in potem izbiraš iz njega.

..create_line(0, 0, 50, 20, fill="#476042", width=3)

to da sam izbiraš ni vredi, vse more sam program nardit :D

Recimo:

def fibonacci(n):
    hue = 0.6
    for i in range(0,n):
        r, g, b = (int(i*255) for i in colorsys.hsv_to_rgb(hue,0.8,0.8))
        hue = hue+0.11-1 if hue+0.11>1 else hue+0.11

        okno.create_line(0, 0, 50, 20, fill="rgb(%s,%s,%s)" % (r,g,b), width=3)
        okno.create_rectangle(x3+a,y3,x4+a,y4, fill="red")

"hue" pač nastaviš kakor želiš vrednost je od 0 do 1, pomeni pa 360 stopinj.

0.8 vrednosti sta 1. "saturation" 2. "value, te pač nastaviš kakor želiš, vrednosti od 0 do 1, pomenijo pa 0% - 100%.

Tudi inkrement (0.11) pač nastaviš poljubno. Ta primer sam uporabljam pri izrisu grafov, kjer je želja čimbolj različne "žive" barve.

Drugače pa si lahko z Photoshop-om recimo pomagaš, tako da odpreš color picker, in izbereš "HSV" pa spreminjaš vrednosti, da boš videl kako to naj bi zgledalo potem.

1

Evo sem probal celotni primer in popravil v tole:

import colorsys
from Tkinter import *

root=Tk()

okno=Canvas(root, width="800", height="600")
okno.pack()
x1=50
y1=15
x2=100
y2=15
x3=125
y3=45
x4=140
y4=75

def RGBToHTMLColor(rgb_tuple):
    """ convert an (R, G, B) tuple to #RRGGBB """
    hexcolor = '#%02x%02x%02x' % rgb_tuple
    # that's it! '%02x' means zero-padded, 2-digit hex values
    return hexcolor

def main():
    n = 15
    fibonacci(n)

def fibonacci(n):
    a,b = 0,1
    hue = 0.6
    for i in range(0,n):
        c = tuple(int(i*255) for i in colorsys.hsv_to_rgb(hue,0.8,0.8))
        hue = hue+0.11-1 if hue+0.11>1 else hue+0.11
        okno.create_line(x1+a,y1*a,x2+a,y2*a, fill=RGBToHTMLColor(c))
        okno.create_rectangle(x3+a,y3,x4+a,y4, fill=RGBToHTMLColor(c))
        print a,b
        a,b, = b,a+b

main()
root.mainloop()
2

Hvala ti majstore, dela ko urca... Za nagrado dobiš všečke pa za pir sm dovžn XD