VPython - wykorzystywanie zmiennych z funkcji w pętli

0

Witam,
mam taki problem, że stworzyłem sobie tablice klocków pokolorowanych na biało. Stworzyłem sobie radiobox'a i funkcję w której to wyznaczam na jaki kolor chcę pomalować klocka. Niestety cały czas koloruje dla koloru równego 0 na żółto. Czy wie ktoś jak zrobić żeby po zmianie radiobox'a na ogon i głowę kolorowało mi na odpowiednie barwy. Nie za bardzo orientuje się dlaczego funkcja ustaw nie zmienia mi tego koloru na inny. Byłbym wdzięczny za wszelkie wskazówki

from visual import *
import wx


def ustaw(evt):
    wybor=klocek.GetSelection()
    if wybor==0:
        kolor=0
    elif wybor==1:
        kolor=1
    else:
        kolor=2


L=800
okno=window(width=1.5*(L+window.dwidth)-100, height=L+window.dheight+window.menuheight-200, menus=True, title='Kus Mateusz - Wireworld')

n=20


scene=display(window=okno, x=25, y=25, width=5*L/8, height=5*L/8, background=(0,0,1), center=(n/2.0, n/2.0, 0), scale=(1.5/n,1.5/n,1.5/n))
pola=[[box(color=color.white, size=(1,1,1)) for col in range(n)] for row in range(n)]


for x in range(n):
    for y in range(n):
        pola[x][y].pos=(x*1.1,y*1.1,0)

q=okno.panel

start=wx.Button(q, label='Start', pos=(1.5*L-400, L/2))
#start.Bind(wx.EVT_BUTTON, startuj)
klocek=wx.RadioBox(q, pos=(1.5*L-400, 200), size=(0.2*L, 0.1*L),
                 choices = ['Przewodnik', 'Ogon', 'Glowa'], style=wx.RA_SPECIFY_ROWS)
klocek.Bind(wx.EVT_RADIOBOX, ustaw)


minx=0
miny=0
kolor=0


while True:
    rate(5)
  
    if scene.mouse.clicked:
        m = scene.mouse.getclick()
        loc = m.pos
        min=(pola[0][0].x-loc.x)*(pola[0][0].x-loc.x)+(pola[0][0].y-loc.y)*(pola[0][0].y-loc.y)

        for i in range(n):
            for j in range(n):
                if (pola[i][j].x-loc.x)*(pola[i][j].x-loc.x)+(pola[i][j].y-loc.y)*(pola[i][j].y-loc.y)<min:
                    min=(pola[i][j].x-loc.x)*(pola[i][j].x-loc.x)+(pola[i][j].y-loc.y)*(pola[i][j].y-loc.y)
                    minx=i
                    miny=j
        if kolor==0:        
            pola[minx][miny].color=color.yellow        
        elif kolor==1:
            pola[minx][miny].color=color.green
        else:
            pola[minx][miny].color=color.red


0

Nie wiem czy o to chodzi, ale według mnie po prostu dałeś kolor = 0 , a potem dałeś do pętli while funkcję if, która koloruje te pola , tak przynajmniej ten kod zrozumiałem :P czyli wg. mnie kod jest wykonywany tak:

  1. Rysuje sobie pola
  2. Wybieram wartość koloru
  3. Zmieniam wartość koloru na 0
  4. O! Funkcja if, jaką mam wartość koloru ? 0 no to przypisuje color.yellow (żółty).

Tak poza Ty chyba w tym if nie sprawdzasz wartości jaką ma klocek tylko jaką wartość ma funkcja kolor

Pewnie dlatego zmienia Ci kolor cały czas na żółty

1 użytkowników online, w tym zalogowanych: 0, gości: 1