#--------------- ce rattache à la saisie manuelle du texte Fenetre de saisie du message------------------ # utilisation du WIDGET TEXT de Tkinter #But empêcher l'utilisateur de rentrer plus de 81 caractères par ligne et plus de 15 lignes #INACTIVER la touche [Tab], le bouton milieu de la souris [Button-2] #et l'appui simultané sur [Control] et [v] #Fait en s'inspirant très fortement des soluces proposées par les membres de ce forum. #qu'il en soient tous remercié pour leur précieuse aide. #--------------------------------------------------------------------------------------------------------- #remarque, dans le widget text: #un caractère est repérée par sa position de type "l.c", ou l est numéro de ligne et c numéro de colonne #"1.0" signifie : 1ere ligne,colonne: 0 "2.3": 2eme ligne colonne: 3 (donc le 4eme caractère car on compte à partir de zéro) #Pour obtenir les numéros lignes et colonne on peut faire: # num_ligne="l.c".split('.')[0] et num_colonne="l.c".split('.')[1] def monevent(event) : #permet de tester si on dépasse ou pas les 15 lignes permises lignes = txt.get( 0.0, 'end') nmb_cr = lignes.count('\n') if nmb_cr >= 15: return "break" # Casser la pile d'événement. ->interdit de rentrer plus de lignes def sauvegarde_message():# on sauvegarde le contenu du widget text global fen_message lign_end=int(txt.index(END).split('.')[0]) #le numéro de la dernière ligne #print "lign_end:",lign_end i=1;lc=[] while i 80 and touche != "'BackSpace'" and touche !="'Up'" and touche !="'Down'" and touche !="'Left'" and touche !="'Right'" \ and touche !="'Delete'": #print "au dela de 80!!" #txt.delete(str(lign_ins)+'.80',str(lign_ins)+'.end') #autre méthode mais moins concluante return "break" #on casse la pile et on interdit de rentrer un caractère ! def mouse_milieu(event):#annuler le copier - coller par bouton milieu souris return "break" def saisie_manuelle_texte_message(): global fen_message,txt fen_message=Tk() fen_message.geometry("%dx%d+%d+%d" % (900,800,0,0)) fen_message.configure(bg="light grey") fen_message.title("Saisissez le texte du Message") #Lucida console ou Courier (fontes de taille fille pour tous les caractères) txt=Text(fen_message,width=82,height=16,font=("Courier",-17),bg="yellow")# 82 car l'utilisateur peut taper ^p à la fin # ce qui occupe 2 caractères en fin de ligne txt.place(x=25,y=140) txt.focus() #invalide combinaison de [Control]+[v] (il faut empécher la copie) #les 2 lignes ci-dessous ont pour but d'éviter que l'utilisateur fasse du copié collé dans le widget text: txt.bind("", lambda e: "break")#une autre façon de faire serait de lier une fonction avec return "break" voir méthode ci-dessous txt.bind("",mouse_milieu) #invalide bouton milieu souris (bouton qui permet aussi de copier-coller) (on aurrait pu le faire avec lambda) #txt.bind("",controlevent) #invalide l'appui sur la touche control gauche (pas utile finalement) txt.bind("",tabevent)#pour inactiver la touche [Tab] txt.bind( "", monevent) # Pour compter les lignes txt.bind("", nb_carac) #cas ou l'utilisateur tape une ligne de plus de 81 caractères / et efface le premier caractère ligne button = Button(fen_message, text=" Validez le texte saisi \n lancez l'impression ",bg="orange", font=("Verdana",-20,"bold"),relief="raised",borderwidth=5, fg="black", command=sauvegarde_message).place(x=300,y=650) titre_texte="""ENTREZ LE TEXTE DE VOTRE MESSAGE. La zone de saisie est en jaune. le titre "Message:" vous est imposé ainsi que la signature: "PG/MOP"\ \nIl ne vous est pas permi par le programme d'augmenter la zone de saisie, La saisie étant limitée pour tenir sur la page du Fax.\ \nLa limitation est de 81 caractères par ligne et de 15 lignes au total.\ \nLe texte saisi apparaîtra tel quel dans votre Fax, respectant scrupuleusement votre présentation (césure, espaces...) """ l_titre=Label(fen_message,text=titre_texte,font=("Times",-14),justify="left",bg="light grey",fg="black").place(x=27,y=10) affich_message_souligne="Message:" affich_cadre_msg=" " affich_pgmop="PG/MOP" affich_cadre_pgmop=" \ \n " l_message=Label(fen_message,text=affich_cadre_msg,font=("Courier",-17),bg="white",fg="white").place(x=25,y=120) l_message2=Label(fen_message,text=affich_message_souligne,font=("Courier",-17,"underline"),bg="white",fg="blue").place(x=25,y=120) l_pgmop=Label(fen_message,text=affich_cadre_pgmop,font=("Courier",-17),bg="white",fg="white").place(x=25,y=445) l_pgmop2=Label(fen_message,text=affich_pgmop,font=("Courier",-17),bg="white",fg="blue").place(x=327,y=460) fen_message.mainloop() #--------------- Fin saisie manuelle du texte -------------------------------------------------------- from Tkinter import * saisie_manuelle_texte_message()