Auto-complétion à partir d'une liste Python
Résolu
Bonjour, je suis actuellement bloqué sur un projet, je souhaiterais utiliser une interface avec le module tkinter et utiliser une entry qui lorsque l'on écrit dedans, pré suggère les mots qui correspondent aux premières lettres entrées à partir d'une liste dans le programme
Je me suis inspiré des sites comme : https://askcodez.com/comment-lauto-completion-de-code-python.html
https://stackoverflow.com/questions/7821661/how-to-write-code-to-autocomplete-words-and-sentences?answertab=modifieddesc#tab-top
mais je n'arrive pas a l'adapter à ma recherche sous Python 3.10.4
code :
Je me suis inspiré des sites comme : https://askcodez.com/comment-lauto-completion-de-code-python.html
https://stackoverflow.com/questions/7821661/how-to-write-code-to-autocomplete-words-and-sentences?answertab=modifieddesc#tab-top
mais je n'arrive pas a l'adapter à ma recherche sous Python 3.10.4
code :
from pyreadline3 import Readline
readline = Readline()
import tkinter
acceuil = tkinter.Tk()
acceuil.title("Acceuil")
acceuil.config(bg="#FFFFFF")
acceuil.geometry("1080x720")
acceuil.maxsize(1080,720)
acceuil.minsize(480,360)
class MyCompleter(object): # Custom completer
def __init__(self, options):
self.options = sorted(options)
def complete(self, text, state):
if state == 0 : # on first trigger, build possible matches
if text : # cache matches (entries that start with entered text)
self.matches = [s for s in self.options if s and tkinter.S.startswith(text)]
else: # no text entered, all matches possible
self.matches = self.options[:]
# return match indexed by state
try :
return self.matches[state]
except IndexError:
return None
completer = MyCompleter(["Bonjour","nous","sommes","des","mots","test"])
readline.set_completer(completer.complete)
readline.parse_and_bind('tab: complete')
selecteur2 = tkinter.Entry(acceuil, width = 30, bd = 5, font = "Arial", justify = "center", background = "green", text = readline.set_completer(completer.complete) )
selecteur2.place(x = 20, y = 100)
acceuil.mainloop()
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
Configuration: Windows / Chrome 101.0.4951.54
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
ne devrais-tu pas commencer par faire un code tkinter qui fonctionne, pui sl'adapter?-
-
-
Code tkinter :
import tkinter acceuil = tkinter.Tk() acceuil.title("Acceuil") acceuil.config(bg="#FFFFFF") acceuil.geometry("1080x720") acceuil.maxsize(1080,720) acceuil.minsize(480,360) selecteur2 = tkinter.Entry(acceuil, width = 30, bd = 5, font = "Arial", justify = "center", background = "green", text = "readline.set_completer(completer.complete)" ) selecteur2.place(x = 20, y = 100) acceuil.mainloop()
Code pyreadline3 :from pyreadline3 import Readline readline = Readline() class MyCompleter(object): # Custom completer def __init__(self, options): self.options = sorted(options) def complete(self, text, state): if state == 0: # on first trigger, build possible matches if text: # cache matches (entries that start with entered text) self.matches = [s for s in self.options if s and s.startswith(text)] else: # no text entered, all matches possible self.matches = self.options[:] # return match indexed by state try: return self.matches[state] except IndexError: return None completer = MyCompleter(["hello", "hi", "how are you", "goodbye", "great"]) readline.set_completer(completer.complete) readline.parse_and_bind('tab: complete') input = raw_input("Input: ") print("You entered", input)
Le code que j'ai essayé en intégrant les 2 est le premier publié.
Mon objectif est de pouvoir (à partir d'une liste de différents mots fournis dans le code) de pouvoir écrire 1 lettre/chiffre dans letk.Entry
et que le programme suggère les différents mots complets qui commence par cette même lettre/chiffre à la façon d'une auto-complétion, et qu'en appuyant sur une touche donnée, le mot s'écrive au complet. -
-
peux-tu utiliser les balises de code (et spécifier python) quand tu partages du code? comme tu le vois, ton code est illisible et il y manque l'indentation, indispensable.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
-
-
Bonjour,
Le problème avec pyreadline3, ça ne marche pas sous Linux, donc personnellement je ne peux pas tester ce que tu as fait. Donc peux-tu plutôt repartir de cet exemple après avoir installéttkwidgets
, qui lui fonctionne correctement ? Pour installer le module en question :- Sous Windows :
pip install ttkwidgets
- Sous Linux (Ubuntu, Debian) :
sudo apt update sudo apt install python3-pip sudo pip3 install ttkwidgets
Bonne chance