Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI > Tkinter
Tkinter Forum d'entraide sur Tkinter et compatible (Tix, Pmw, ...). Avant de poster -> FAQ Tkinter
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/02/2013, 16h39   #1
aoumnad
Candidat au titre de Membre du Club
 
Homme
Enseignant Chercheur
Inscription : décembre 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 18
Points : 10
Points : 10
Par défaut position du curseur dans widget text

Bonjour,
C'est assez curieux, il semblerait que la seule façon de déplacer le curseur dans un widget Text est la souris ou le clavier.
J'ai trouvé : widget.mark_set(INSERT,'nouvelle position')
par exemple monwidget.mark_set(INSERT, END)

il se trouve que cette méthode modifie la position d'insertion du texte qui est inséré par la méthode .insert(INSERT,'texte') mais pas celle du texte qui est entré au clavier.

Est ce que vous avez une idée, Merci

ma config: python 3.3, tkinter 8.5, windows 7
aoumnad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 18h08   #2
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 613
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 613
Points : 3 724
Points : 3 724
Bonjour,

Citation:
Envoyé par aoumnad Voir le message
il se trouve que cette méthode modifie la position d'insertion du texte qui est inséré par la méthode .insert(INSERT,'texte') mais pas celle du texte qui est entré au clavier.

Pour moi cela fonctionne...
Que donne cela chez vous :
Code :
1
2
3
4
5
6
7
8
9
import tkinter as tk
 
root = tk.Tk()
text = tk.Text(root)
text.insert(tk.END, "AZERTYUIOP")
text.pack()
text.focus_set()
text.mark_set(tk.INSERT, "1.5")  # Ligne 1 colonne 5
root.mainloop()
Toujours pareil ?

@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/02/2013, 18h41   #3
aoumnad
Candidat au titre de Membre du Club
 
Homme
Enseignant Chercheur
Inscription : décembre 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 18
Points : 10
Points : 10
merci pour ta réponse,

En effet, ça marche,
sauf que moi, je prend le focus en cliquant avec la souris, j'ai associé un bind pour détecter cet évènement. Ça marche la première fois. Si je clique dans une autre fenetre, puis je reviens, normalement, au moment où je reclique dans ma fenetre, ça doit refaire le positionnement du curseur, mais ça ne semble pas marcher
Code :
1
2
3
4
5
6
7
8
9
10
11
12
import tkinter as tk
 
def curseur(bidon):
    text.mark_set(tk.INSERT, "1.5")  # Ligne 1 colonne 5
 
root = tk.Tk()
text = tk.Text(root)
text.insert(tk.END, "AZERTYUIOP")
text.pack()
text.bind("<FocusIn>", curseur)
#text.focus_set()
root.mainloop()
merci,
aoumnad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h01   #4
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 613
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 613
Points : 3 724
Points : 3 724
Re,

J'ai effectivement vu des effets semblables suivant les wm.

Ceci arrange la chose ?
Code :
text.bind('<Enter>', lambda e: text.focus_set())
@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 19h18   #5
aoumnad
Candidat au titre de Membre du Club
 
Homme
Enseignant Chercheur
Inscription : décembre 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 18
Points : 10
Points : 10
Par défaut Re

Non,
pas pour l'instant,

merci
aoumnad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 20h15   #6
aoumnad
Candidat au titre de Membre du Club
 
Homme
Enseignant Chercheur
Inscription : décembre 2011
Messages : 18
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 18
Points : 10
Points : 10
Par défaut Re

Ça y est, voici une solution grâce à junuxx sur stackoverflow
Je n'ai pas très bien compris, il semble qu'il fallait donner le temps au widget de prendre le focus avant de modifier la mark INSERT


Code :
1
2
3
 
def curseur(bidon):
    fp.after(10, lambda: edit.mark_set(INSERT, END))
Merci beaucoup PauseKawa


A+
aoumnad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h06   #7
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 613
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 613
Points : 3 724
Points : 3 724


Et qui vous dit que 10 est suffisant ?
A la limite jouer sur le _register :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import tkinter as tk
 
 
def markset(widget, value):
    global currentmark
    widget.mark_set(tk.INSERT, value)
    currentmark = widget.bind("<ButtonRelease-1>",
                              lambda e: widget.mark_set(tk.INSERT, value)
                                        or widget.deletecommand(currentmark))
 
 
insert = "1.5"
root = tk.Tk()
text = tk.Text(root)
text.insert(tk.END, "AZERTYUIOP")
text.insert_set = lambda val: markset(text, val)
text.pack()
text.insert_set("1.5")
text.focus_set()
root.mainloop()
Ou un truc du style mais c'est trop 'léger' de jouer sur un timing.

@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 21h08   #8
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 613
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 613
Points : 3 724
Points : 3 724
Et si voulez vraiment un .after() pensez a faire un .update() avant

@++
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
import tkinter as tk
 
 
def curseur(bidon):
    text.update()
    text.mark_set(tk.INSERT, currentset)
 
 
currentset = "1.5"
root = tk.Tk()
text = tk.Text(root)
text.insert(tk.END, "AZERTYUIOP")
text.pack()
text.bind("<ButtonRelease-1>", curseur)
text.after(5000, lambda: globals().__setitem__("currentset", "1.2"))
root.mainloop()
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h35.


 
 
 
 
Partenaires

Hébergement Web