2014-05-24 2 views
1

J'utilise python et il y a un problème bizarre:problème étrange dans la variable python 2.7 sur linux (pygame/oreiller)

pygame.init() 
f = 1 

def setf(widget, buttonToggled): 
    f = int(buttonToggled) 

def getf(): 
    if f == 1: return ImageFilter.BLUR 
    if f == 2: return ImageFilter.CONTOUR 
    if f == 3: return ImageFilter.DETAIL 
    if f == 4: return ImageFilter.EDGE_ENHANCE 
    if f == 5: return ImageFilter.EMBOSS 
    if f == 6: return ImageFilter.SMOOTH 
    if f == 7: return ImageFilter.SHARPEN 

def doFilter(widget, buttonToggled): 
    global ip 
    if winBook.get_current_page() == 2 and f == 1: 
     ip = pygame.image.fromstring(Image.fromstring("RGBA",(320,294),pygame.image.tostring(ip, "RGBA")).filter(getf()).convert("RGBA").tostring("raw", "RGBA"), (320,294), "RGBA") 
     upd() 

applyButton.connect("clicked", doFilter, f) 
filterBlur.connect("toggled", setf, 1) 
filterContour.connect("toggled", setf, 2) 
filterDetail.connect("toggled", setf, 3) 
filterEE.connect("toggled", setf, 4) 
filterEmboss.connect("toggled", setf, 5) 
filterSmooth.connect("toggled", setf, 6) 
filterSharpen.connect("toggled", setf, 7) 

Bien sûr, je l'ai évidemment créé les objets d'un gtk.Builder, d'un fichier de glade. J'ai aussi une image de pygame appelée "ip" et une fenêtre de pygame.

Mon problème est quand je bascule un autre bouton que le filterBlur (qui est un bouton radio), pour une raison quelconque, getf renvoie toujours ImageFilter.BLUR. J'ai précédemment mis print f dans setf et getf et les deux retournent la valeur correcte. Je suis trop noob pour faire du débogage avec le threading (avoir un thread rapport constamment f tandis qu'un autre exécute le programme). Que se passe-t-il? Est-ce que f revient à 1, ou est-ce que c'est à l'intérieur de getf?

Répondre

0

Vous devez placer une instruction global f à l'intérieur de setf. Sinon, la fonction de réglage f crée simplement une variable locale