Boîtes de dialogue saisie

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

Le problème exposé dans ce sujet a été résolu.

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 :) .

+0 -0

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(...)
+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.

+1 -0

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.

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.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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