J'essaie d'utiliser un champ Entry
pour obtenir une entrée manuelle, puis je travaille avec ces données.
Toutes les sources que j'ai trouvées prétendent que je devrais utiliser la fonction get()
, mais je n'ai pas encore trouvé un mini exemple de travail simple, et je ne peux pas le faire fonctionner.
J'espère que quelqu'un pourra me dire ce que je fais mal. Voici un mini fichier:
from tkinter import *
master = Tk()
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
content = entry.get()
print(content) # does not work
mainloop()
Cela me donne un champ Entry
que je peux saisir, mais je ne peux rien faire avec les données une fois saisies.
Je soupçonne que mon code ne fonctionne pas car initialement, entry
est vide. Mais comment puis-je accéder aux données d'entrée une fois qu'elles ont été saisies?
Il semble que vous puissiez être confus quant à l'exécution des commandes. Dans votre exemple, vous appelez la méthode get
avant que l'interface graphique ait une chance d'être affichée à l'écran (ce qui se produit après avoir appelé mainloop
.
Essayez d'ajouter un bouton qui appelle la méthode get
. C'est beaucoup plus facile si vous écrivez votre application en tant que classe. Par exemple:
import tkinter as tk
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.entry = tk.Entry(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.pack()
self.entry.pack()
def on_button(self):
print(self.entry.get())
app = SampleApp()
app.mainloop()
Exécutez le programme, saisissez le widget d'entrée, puis cliquez sur le bouton.
Vous pouvez également utiliser une variable StringVar
, même si ce n'est pas strictement nécessaire:
v = StringVar()
e = Entry(master, textvariable=v)
e.pack()
v.set("a default value")
s = v.get()
Pour plus d'informations, consultez cette page sur effbot.org .
Un exemple simple sans classes:
from tkinter import *
master = Tk()
# Create this method before you create the entry
def return_entry(en):
"""Gets and prints the content of the entry"""
content = entry.get()
print(content)
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
# Connect the entry with the return button
entry.bind('<Return>', return_entry)
mainloop()
*
master = Tk()
entryb1 = StringVar
Label(master, text="Input: ").grid(row=0, sticky=W)
Entry(master, textvariable=entryb1).grid(row=1, column=1)
b1 = Button(master, text="continue", command=print_content)
b1.grid(row=2, column=1)
def print_content():
global entryb1
content = entryb1.get()
print(content)
master.mainloop()
Ce que vous avez fait de mal, c'est de ne pas le mettre dans une fonction Define alors vous n'aviez pas utilisé le .get
fonctionne avec la variable de texte que vous avez définie.