Gestion d'une interface graphique

lilly74 Messages postés 8 Date d'inscription dimanche 19 octobre 2008 Statut Membre Dernière intervention 11 mars 2010 - 11 mars 2010 à 19:47
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 - 12 mars 2010 à 22:14
Bonjour,
je débute en python et j'essaie de créer une interface graphique qui prend en entrée deux chaînes de caractères et qui les traite selon une méthode choisie par l'utilisateur. Le résultat devrait être affiché dans l'espace que j'ai réservé.
Mon problème est que je n'arrive pas à faire fonctionner cette interface.
import Tkinter
from Tkinter import *
import tkMessageBox

import re

from Alignement import *

class Application:

    def __init__(self):
        
        #Constructeur fenetre principale#
        fenetre = Tk()
        #fenetre.initialize()

        #Toolbar
        bar = Menu(fenetre)

        fichier = Menu(bar)
        fichier.add_command(label="Enregistrer sous...")#, command =)
        fichier.add_separator()
        fichier.add_command(label="Quitter", command = fenetre.destroy)
        methode = Menu(bar)
        methode.add_command(label="Distance de L" , command = DL)
        methode.add_command(label="Méthode 2")#, command = )
        methode.add_command(label="3 ")#, command = )
        methode.add_command(label="4")#, command = )
        methode.add_command(label="5")#, command = )
        aide = Menu(bar)
        aide.add_command(label="A propos", command = self.about)

        bar.add_cascade(label="Fichier", menu = fichier)
        bar.add_cascade(label="ChoixMéthode", menu = methode)
        bar.add_cascade(label="Aide", menu = aide)

        fenetre.config(menu=bar)

        #Entree des donnees
        fenetre.title('Alignement de séquences')
        Label(fenetre, text = "Rentrez vos séquences:", fg='black', font =("Helvetica", "20")).grid(row = 0, column = 10, sticky='NS')
        Label(fenetre, text = "Séquence1:", fg='blue', font =("Helvetica", "16", "bold italic underline")).grid(row = 2, column = 10, sticky='NS')
        fenetre.entree1 Entry(fenetre, width150)
        fenetre.entree1.grid(row 3, column 10, sticky='NS')
        fenetre.entree1.bind("<Return>", self.OnPressEnter) #la séquence est entrée définitivement lorsque l'utlisateur
                                                                #appuie sur la touche "entrée"
        seq1=fenetre.entree1.get()
        s1 = re.findall('[A-Z]+', seq1.upper()) #on ne garde que les lettres de l'alphabet
        seq1=''.join(s1)
        Label(fenetre, text = "Séquence2:", fg='blue', font =("Helvetica", "16", "bold italic underline")).grid(row = 4, column = 10, sticky='NS')
        fenetre.entree2 Entry(fenetre, width150)
        fenetre.entree2.grid(row =5, column = 10, sticky='NS')
        fenetre.entree2.bind("<Return>", self.OnPressEnter)
        seq2=fenetre.entree2.get()
        s2 = re.findall('[A-Z]+', seq2.upper())
        seq2=''.join(s2)
        #Commande d'alignement des séquences
        bouton = Button(fenetre, text="Choisissez la méthode pour aligner", fg='red', font=("-*-lucidatypewriter-medium-r-*-*-*-200-*-*-*-*-*-*") ).grid(row =8,column = 10, sticky='NS')

        #Place pour l'alignement des séquences
        liste = Listbox(height=3,width=50).grid(row = 9, column = 10, rowspan = 50, sticky='NSEW')
                
        fenetre.grid_rowconfigure(0, weight = 2)
        fenetre.grid_rowconfigure(2, weight = 2)
        fenetre.grid_rowconfigure(3, weight = 2)
        fenetre.grid_rowconfigure(4, weight = 2)
        fenetre.grid_rowconfigure(5, weight = 2)
        fenetre.grid_rowconfigure(8, weight = 1)
        fenetre.grid_rowconfigure(9, weight = 20)
        fenetre.grid_columnconfigure(10, weight = 2)
        fenetre.wm_state(newstate="zoomed")
        fenetre.mainloop()

    """def initialize(self):
        self.grid()
        
    def sortie(self, fenetre):
        self.fenetre.destroy()"""

    def about(self):
        tkMessageBox.showinfo("Principe", "Choisir une méthode et rentrer les deux séquences à aligner...")

    def OnPressEnter(self,event):
        #print "Séquence entrée !"


    def DL(self):
        m = len(Seq1)
        n = len(Seq2)
        T = MC(Seq1, Seq2)
        L = Alignement(Seq1, Seq2, m+1, n+1, T, [])
        print L


# démarrer le gestionnaire d'événement

if __name__ == "__main__":
    i=Application()


Je ne sais pas comment faire tourner DL et lui faire afficher les résultats dans la ListBox:
je commence à me mélanger les pinceaux

Pourriez-vous m'indiquer comment procéder svp?

Merci d'avance
 

1 réponse

lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 73
12 mars 2010 à 22:14
Bonsoir,
J'ai essayé de faire tourner ce code sur mon ordi et voici les erreurs que l'ai rencontrées:

1)
[i]def OnPressEnter(self,event):
#print "Séquence entrée !"


def DL(self):
m = len(Seq1)/i

"OnPressEnter" n'a pas d'instruction ce qui provoque une erreur de syntaxe

2)
methode.add_command(label="Distance de L" , command = DL)
DL n'est pas reconnu, il fait partie de la classe APPLICATION il faut le préfixer
methode.add_command(label ="Distance de L" , command = self.DL)

3)
[i] def DL(self):
m = len(Seq1)
n = len(Seq2)
T = MC(Seq1, Seq2)
/i
Les variables Seq1 et Seq2 n'existent pas (S majuscule)
S'il s'agit des variables locales utilisées dans _init_ il faut les préfixer(self) pour les rendre visibles dans la classe.

4)
T = MC(Seq1, Seq2)
Je suppose que MC fait partie de l'import Alignement ?

J'ai arrêté a ce niveau.
0