Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/05/2019, à 16:29

Mic19

[Résolu]Projet: Saisie prédictive python

Bonjour à tous,
j'ai un projet à réaliser en Python qui consiste à faire une saisie prédictive , comme sur watsapp par exemple où les 3 boutons sont affichés en dessous de notre saisie et nous proposent des mots .Ces mots proposés sont donc les mots les plus fréquents soit en fonction du mot ou des deux mots précédents (prédiction), soit en fonction du début de mot que l'utilisateur va écrire (complétion). Etant donné qu'il nécessite plusieurs notions que je n'ai pas encore vues en Python j'aimerais faire appel à votre aide pour plusieurs choses:
-D'abord comment puis-je faire pour attraper chaque lettre de la saisie de ma fenêtre ,que l'utilisateur va écrire ? Pour prédire le mot j'ai besoin d'avoir une main mise sur les lettres écries et donc chaque lettre.(sans appuyer sur un bouton bien sûr)
-Ensuite comment faire pour réaliser une sorte de 3 "boutons" qui alterneront de label pour proposer les mots prédits ? Est-ce qu'il existe une autre sorte de widget pour réaliser ce genre de chose ? Etant donné que l'utilisateur pourra appuyer sur un mot proposé je pense qu'il s'agit de Bouttons mais je suis pas autre sur le mauvais chemin .

Merci de votre aide

Dernière modification par Mic19 (Le 04/05/2020, à 18:09)

Hors ligne

#2 Le 20/05/2019, à 11:42

kholo

Re : [Résolu]Projet: Saisie prédictive python

salut,
d'abord tu vas bosser avec des set ou des dicos qui sont plus rapides dans ce genre de travail que des listes par exemple...

ensuite pour attraper les lettres pour les traiter en live tu peux utiliser un bind sur ton objet de saisie et récupérer le contenu du texte tel que tapé si tu ne veux pas faire une gestion compliquée qui devra tenir compte des frappes, copier / coller et effacements.

#!/usr/bin/env python
# -*- coding: UTF8 -*-

import tkinter as tk

def clavier(event):
    """ Gestion de l'événement Appui sur une touche du clavier """
    touche = event.keysym
    print(touche)


# Création de la fenêtre principale
ma_fenetre = tk.Tk()
ma_fenetre.geometry("+200+200")
ma_fenetre.title('clavier et souris')

# Création d'un widget Button (bouton Quitter)
tk.Button(ma_fenetre, text ='Quitter', command = ma_fenetre.destroy).grid()

# pour intersepter les frappes clavier
ma_fenetre.bind('<Key>',clavier)

# pour quitter avec la touche escape
ma_fenetre.bind('<Escape>', lambda event: ma_fenetre.destroy())

ma_fenetre.mainloop()

pour le widget, il sera plus facile de te créer un objet à partir d'autres de façon à le gérer plus finement... mais il faut faire en POO

du code !!!

Hors ligne

#3 Le 20/05/2019, à 19:43

kevlar

Re : [Résolu]Projet: Saisie prédictive python

Bonsoir.
depuis les dernières versions de Gtk2, et à fortiori depuis Gtk3, le widget GtkSearchEntry fait exactement ce que tu demandes . A savoir :
- un certain délai optimisé entre chaque scrutation des lettres tapées (par exemple pour que l'utilisateur corrige une erreur).
-  l'émission du signal "changed" qui va bien au bout du même délai raisonnable, afin que tu scrutes la saisie courante de ton utilisateur.
Voici ce que çà donne, en très gros, en C :

1/ je définis l'objet :

 GtkWidget *search_entry = gtk_search_entry_new ();
  gtk_widget_set_name(search_entry, "search_entry" );

(le set_name pour jouer avec le CSS, pas obligatoire, mais si tu veux faire une belle interface, tu y passeras sans doute)

2/ Je branche la fonction de réponse ("callback") :

  g_signal_connect(search_entry, "search-changed", 
                   G_CALLBACK(on_find_changed), data);

3/ et tu devines qu'après tout çà, il faut définir une fonction de réponse :

void
on_find_changed (GtkSearchEntry *entry, APP_data *data)
{
 ...
}

Ne tiens pas compte du type APP_data, propre à mon programme.
4/ et après, on rentre dans une boucle d'attente d'événements de Gtk (là je ne donne pas d'exemple).
Ton projet est sympa, bon courage à toi ! Je t'ai mis des extraits d'un projet personnel où, précisément, le programme doit réagir, en quasi temps réel, aux changements dans un champ de recherche de mots dans un texte.
Lien vers la documentation (pour le C, mais tu devrais trouver tout seul la version python ...).: GtkSearchEntry

Je laisse maintenant les autres intervenants d'aider.

Hors ligne

#4 Le 21/05/2019, à 10:59

Mic19

Re : [Résolu]Projet: Saisie prédictive python

Bonjour tout le monde , merci beaucoup d'avoir pris du temps pour me répondre !
Etant donné que mon projet est à rendre pour demain , j'ai fait mes propres recherches et je suis resté un tas d'heures pour réussir à le finir finalement. Tout d'abord c'ést en Python et ensuite j'utilise exactement ce que vous proposé dans mon programme et tout marche à merveille , la seule petite chose que j'ai pas réussi à faire c'est de pouvoir prédire des vrais smileys( mon professeur le demande) telles que tongue ou encore yikes
Effectivement kholo, dans ma partie algorithme je travaille avec des dictionnaires et des listes et dans ma partie graphique j'utilise saisie.bind(touche,action) avec saisie qui représente l'Entry .Et pareil keviar , j'utilise les event.char ou encore les event.keycode(pour tester si il y a espace ou delete..)  pour intéragir avec l'utilisateur et intercepter chaque mouvement dans la saisie(Entry).
Mais sinon oui j'ai adoré faire ce projet c'est super sympa et très faisable même pour ceux qui n'ont pas fait de python toutes leurs vies .Merci encore pour vos réponses !

Dernière modification par Mic19 (Le 21/05/2019, à 11:05)

Hors ligne