J'ai passé de nombreuses heures à essayer de remplacer les widgets askinteger et asktring par des widgets d'entrée simples dans ce code. Je suis sûr qu'il existe un moyen simple de transmettre les informations du widget d'entrée afin qu'il puisse être utilisé dans d'autres fonctions du code, mais tout ce que j'ai recherché et essayé a échoué. Toute aide sera la bienvenue.Comment rendre les données du widget d'entrée Tkinter disponibles pour d'autres fonctions?
from tkinter import *
from tkinter.simpledialog import askinteger
from tkinter.simpledialog import askstring
from random import randrange
def read_file(words_file):
with open(words_file, 'r') as f: # Read the text file
wordList = [] # Create an empty string called wordList
for line in f: # For every line in the text file
wordList += line.split() # Add another item to the list
f.close()
return wordList # Return the list
def select_word(wordList, word):
wordLength = 0
length = askinteger("Letters", "How Many Letters?") # Ask user for amount of letters
while wordLength != length:
wordNumber = randrange(0, len(wordList)) # Randomly select a number between 0 and length of wordList
word = wordList[wordNumber] # Select a word from the list using wordNumber
word = word.upper()
wordLength = len(word) # Calculate the length of the selected word
return word
def get_letter():
letter = askstring("Please enter a letter", "Which letter would you like to try?")
letter = letter.upper() # Convert letter to uppercase
return letter
C'est le genre de choses que j'ai essayées. J'ai aussi utilisé stringvar.
from tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus_set()
def callback():
print (e.get())
global fred
fred = e.get()
print(fred)
return fred
b = Button(master, text="get", width=10, command=callback)
b.pack()
print(fred)
mainloop()
Nous vous remercions de votre conseil. J'ai maintenant essayé ce qui suit, mais je n'arrive toujours pas à faire fonctionner la fonction d'impression (fred). Je suis sûr que c'est une erreur stupide mais je ne peux pas voir ce que je fais mal.
from tkinter import *
master = Tk()
e = Entry(master)
e.pack()
e.focus_set()
fred = '' # declare fred in the outer scope
def callback():
print (e.get())
fred = (e.get())
return fred # removed global statement as I understand they should be avoided
b = Button(master, text="get", width=10, command=callback)
b.pack()
print(fred)
mainloop()
La 'print (fred)' (que j'ai enlevé) n'est jamais appelé après que le 'mainloop()' ait commencé; après le rappel, la valeur de 'fred' est définie sur celle de' entry'. Vous pouvez l'utiliser pour mettre à jour une étiquette si vous le souhaitez, ou faire autre chose que vous aimez. –