comment utiliser la zone de texte dans tkinter, et d'utiliser les valeurs? python 3
Comment créer des multi-lignes dans une entrée widget tkinter, et d'utiliser ces entrées pour créer quelque chose?
Par exemple, je veux un widget zone de texte à venir et demander à l'utilisateur:
How many squares do you want? (ex: 4x4, 5x5)
What color do you want them?
Et avec les utilisateurs d'entrée, je voudrais créer que de nombreux x-quantité de places dans les précis de la hauteur/largeur et de spécifier les couleurs etc.
Je suis totalement nouveau pour tkinter, et je ne suis pas vraiment sûr de savoir comment aborder cette.
J'ai essayé en utilisant cela, mais je ne suis pas vraiment sûr de savoir comment ajouter plus de lignes et d'utiliser les valeurs saisies.
import tkinter
from tkinter import *
class Squares:
root = Tk()
root.title('Random')
x = Label(text='How many squares? (ex: 4x4, 5x3)').pack(side=TOP,padx=10,pady=10)
Entry(root, width=10).pack(side=TOP,padx=10,pady=10)
Button(root, text='OK').pack(side= LEFT)
Button(root, text='CLOSE').pack(side= RIGHT)
- Ce n'est pas la façon dont vous utilisez des classes en Python. Je ne suis pas sûr de ce que
Squares
est censé faire, mais je suis sûr qu'il ne va pas faire ce qu'il est censé. - Gardez à l'esprit que
Label(...).pack()
retourneNone
, de sorte que vous ne sont pas d'assigner le widget à la variablex
. - Avez-vous déjà travaillé par le biais de Introduction À Tkinter, ou de tout autre type de tutoriel? Le deuxième exemple montre comment créer une application de classe, et comment faire des boutons qui permettent d'exécuter des actions. La seule pièce qu'il manque, c'est l'obtention de la valeur de la
Entry
et de faire quelque chose avec elle.
Vous devez vous connecter pour publier un commentaire.
Vous avez un certain nombre de problèmes ici.
Je ne suis pas sûr de ce que l'
Squares
classe est censé faire, mais en gros, c'est de ne rien faire. Vous avez un tas de code qui s'exécute lorsque vous définissez la classe, la création d'un peu de variables (qui va finir comme les attributs de classe, partagée par toutes les instances de la classe), et... c'est tout. Plutôt que d'essayer de comprendre ce que vous avez l'intention ici, je vais juste à la ferraille de la classe et de faire tout cela au niveau du module de code.Vous n'appelez jamais
root.mainloop()
, de sorte que votre programme il suffit de définir une interface graphique et de ne jamais exécuter.Vous n'avez pas lier vos boutons à rien, donc il n'y a aucun moyen qu'ils peuvent avoir n'importe quel effet. Vous avez besoin de créer une sorte de fonction qui fait quelque chose, puis passe comme
command
argument, ou.bind
plus tard.Vous n'avez pas de magasin de références pour vos commandes, donc il n'y a aucun moyen d'y accéder plus tard. Si vous voulez obtenir la valeur de l'entrée, vous avez besoin de vous y référer. (L'exception est votre
x
variable, mais qui va êtreNone
, parce que vous êtes le paramètre le résultat de l'appelpack
sur leLabel
, pas laLabel
lui-même.)Une fois que vous avez fait cela, vous avez juste besoin d'analyser la valeur, ce qui est assez facile.
Mettant tous ensemble:
Vous avez juste à changer que
print
faire quelque chose d'utile, comme la création de places.Si vous n'avez pas besoin d'un plan pour la zone de texte, create_text serait la chose la plus facile, même si elle n'a pas une enveloppe fonction de texte(au moins, en python 3, vous pouvez le faire):
Essayer!