lilly74
Messages postés8Date d'inscriptiondimanche 19 octobre 2008StatutMembreDernière intervention11 mars 2010
-
11 mars 2010 à 19:47
lespinx
Messages postés106Date d'inscriptionlundi 9 octobre 2006StatutMembreDernière intervention23 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
"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 ?