Boîtes de dialogue saisie

Existe t-il des boîtes de dialogues de saisie de texte dans Tkinter ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir, je suis novice en python et étant entrain de réaliser un petit projet en python je voulais savoir s'il existait des boîtes de dialogues de saisie de texte avec le module Tkinter ou si l'on est obligé de les créer soit même en dérivant la classe Dialog.
Par exemple comme celle-ci:

Image utilisateur

PS : J'ai trouvé askstring mais est ce que ce n'est pas obsolète ?
Merci d'avance pour vos réponses,bonne soirée :) .

Édité par Octodex

+0 -0
Auteur du sujet

Salut et merci de m'avoir répondu :), j'ai regardé rapidement mais je n'ai pas vu de boîte de dialogue dans laquelle on peut saisir du texte je voudrais avoir quelque chose équivalent à askquestion et si possible qui soit présent dans le module Tkinter.

+0 -0

Cette réponse a aidé l'auteur du sujet

Je ne crois pas que askstring soit obsolète. Si tu la cherches dans la bibliothèque tkinter, elle est dans des modules différents selon la version de Python.

  • Python 3 : tkinter.simpledialog.askstring
  • Python 2 : tkSimpleDialog.askstring

Si j'en crois ta demande, cette fonction semble suffire, mais ça reste une boîte de dialogue très limitée. Pour avoir quelque chose d'un peu plus personnalisable ou paramétrable, il faudra passer par la classe Dialog.

[Edit] Certains modules du package tkinter (Python 3) nécessitent d'être explicitement importés, je crois que c'est le cas de simpledialog :

1
2
3
4
5
6
7
8
9
from tkinter import simpledialog

simpledialog.askstring(...)

# ou

from tkinter.simpledialog import askstring

askstring(...)

Édité par psycopy

+1 -0

Oui, c'est normal. Tkinter c'est un binding de tcl/tk, une vielle lib. Ce qui est moins normal c'est l'aspect des boutons de ta fenêtre principale. Je suppose que tu utilises les boutons de ttk ? Si tu veux les mêmes dans ta boîte de dialogue, tu vas devoir la créer toi-même en y intégrant les widgets de ttk.

Édité par psycopy

+1 -0

Cette réponse a aidé l'auteur du sujet

En créant une classe qui dérive de Dialog ?

Octodex

Oui exactement. Je t'invite à lire le fichier Lib/tkinter/simpledialog.py ou au moins la doc avec help(simpledialog).

Un petit exemple d'intégration des boutons ttk dans la boite de dialogue _QueryString après avoir lu les sources du module :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
try:
    # Python 3
    from tkinter import *
    from tkinter import ttk
    from tkinter.simpledialog import _QueryString
except ImportError:
    # Python 2
    from Tkinter import *
    import ttk
    from tkSimpleDialog import _QueryString


class _MyQueryString(_QueryString):

    def __init__(self, *args, **kw):
        _QueryString.__init__(self, *args, **kw)

    def buttonbox(self):
        box = ttk.Frame(self)
        #w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
        w = ttk.Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
        w.pack(side=LEFT, padx=5, pady=5)
        #w = Button(box, text="Cancel", width=10, command=self.cancel)
        w = ttk.Button(box, text="Cancel", width=10, command=self.cancel)
        w.pack(side=LEFT, padx=5, pady=5)
        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)
        box.pack()

def askstring(title, prompt, **kw):
    #d = _QueryString(title, prompt, **kw)
    d = _MyQueryString(title, prompt, **kw)
    return d.result


# ...


def getpass():
    pwd = askstring("Password", "Your password:", parent=root, show='*')
    label["text"] = str(pwd)

root = Tk()

label = Label(root)
label.pack()

Button(root, text="Password", command=getpass).pack()

root.mainloop()

Comme tu pourras le voir, je n'ai fait que reprendre ce qui existe en modifiant seulement 3 lignes.

+1 -0

dans mon exemple, il s' agit d' inserter (en bas du screen shot)

buffalo974

Ce n'est pas une boite de dialogue, c'est simplement l'équivalent de l'objet Entry.
Je n'en suis pas certain, mais il me semble qu'il est impossible de créer des boites de dialogue avec Pygame, car il est impossible (ou alors très difficile ?) d'avoir plusieurs fenêtres avec la SDL.

Édité par psycopy

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte