Bonjour à tous,

Bon je suis novice et commence tout juste à programmer en Python donc mon problème relève peut d'être d'une bêtise grossière mais je ne trouve pas de réponse sur internet.

Configuration :
J'ai installé Anaconda 2.4.1 64 bits avec donc la plateforme de codage Spyder, le tout avec Python 2.7. Mon PC tourne sur Windows7 pro 64bits.

Problématique :
Je veux utiliser une interface avec l'utilisateur pour choisir des opérations à effectuer sur des images (code ci-après). Pour le moment il s'agit d'une interface basique avec 2 boutons, un permettant de lancer une boite de dialogue d'ouverture d'un fichier image pour faire la matrice de cooccurrence de son canal Rouge, et l'autre pour quitter la fenêtre.

Mon souci réside dans le fait que la console Python interne à Spyder dans laquelle j'exécute mon programme ne se réinitialise plus toute seule quand je quitte ma fenêtre Tkinter, que ce soit par le bouton Quitter ou par la croix de fermeture de la fenêtre. Comme si quelque chose continuait à s'exécuter malgré la fermeture de la fenêtre. Je suis obligé de réinitialiser manuellement la console pour relancer le programme (via le triangle Start vert en haut à droite de la fenêtre).
De plus, je n'ai accès à aucune de mes variables via l'Explorateur de variables pendant et après l'exécution de la fenêtre, ce qui est un peu problématique pour faire du débogage ensuite.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
# Interface de dialogue
import Tkinter
import tkFileDialog
 
# Traitement images
from skimage.feature import greycomatrix, greycoprops
from skimage import data
 
# Fichier Excel
from xlwt import Workbook
 
 
def afficheCanal(c) :
 
 
    Tkinter.Tk().withdraw() # Close the root window
    in_path = tkFileDialog.askopenfilename()
    general_path = os.path.split(os.path.abspath(in_path))
 
 
 
    im = PIL.Image.open(in_path)
    R, G, B = im.split() # R = rouge, G = vert, B = bleu
    R = np.asarray(R, dtype = np.uint8)
    G = np.asarray(G, dtype = np.uint8)
    B = np.asarray(B, dtype = np.uint8)
 
    #R = np.where(R > 25., 255., R) 
    #R = np.where(R < 5., 0., R)
 
    if c == 1 :
 
      fig = plt.figure("Cooc")
      plt.clf()  # Purge la figure
 
      ax = fig.add_subplot(2,2,1)
      ax.set_title("Image de base")
      plt.imshow(R, cmap=cm.gray, origin = "lower")
      plt.colorbar()
 
      glcm = greycomatrix(R, [1], [0], 256, symmetric=True, normed=True)
 
      ax = fig.add_subplot(2,2,2)
      ax.set_title("Matrice de cooccurrence")
      plt.imshow(glcm[:, :, 0, 0], cmap=cm.gray, origin = "lower")
      plt.colorbar()    
 
      glcm = np.where(glcm > 0., 1., glcm)
      ax = fig.add_subplot(2,2,3)
      ax.set_title("Matrice de cooccurrence > 0")
      plt.imshow(glcm[:, :, 0, 0], cmap=cm.gray, origin = "lower")
      plt.colorbar()  
 
      contrast = greycoprops(glcm, prop='contrast')
 
# Create an PyQT4 application object.
a = QtGui.QApplication(sys.argv)       
 
# The QWidget widget is the base class of all user interface objects in PyQt4.
w = QtGui.QWidget()
 
# Set window size. 
w.resize(320, 240)
 
# Set window title  
w.setWindowTitle("Hello World!") 
 
# Add a button
btn = QtGui.QPushButton("Matrice de coocurrence", w)
btn.clicked.connect(lambda : afficheCanal(1))
btn.resize(btn.sizeHint())
btn.move(100, 80)       
 
 
btn1 = QtGui.QPushButton("Quitter", w)
btn1.setToolTip('Click to quit!')
btn1.clicked.connect(exit)
btn1.resize(btn1.sizeHint())
btn1.move(100, 160)  
 
 
# Show window
w.show() 
 
sys.exit(a.exec_())

Quelqu'un saurait-il d'où cela vient svp ?
Est-ce que j'utilise Tkinter de mauvaise manière ou est-ce que j'oublie de fermer quelque chose ?


Merci d'avance,

Thomas