Utilisation de deux variables à l'intérieur et à l'extérieur de tkinter après le mainloop ()

2020-06-30 python-3.x tkinter tkinter-entry

Je suis un programmeur amateur qui est très nouveau sur python et c'est mon projet tkinter. J'essaie de créer un script GUI pour entrer deux valeurs numériques dans un fichier à l'aide de tkinter. Ces valeurs doivent être des nombres entiers non négatifs et la première valeur doit être supérieure à la seconde. Le problème est que lorsque j'utilise la méthode .get () pour obtenir les valeurs dans le mainloop (), il semble les imprimer correctement mais je ne peux pas faire de comparaison des valeurs dans ou en dehors du mainloop (). De plus, après le mainloop (), les variables n'ont aucune valeur. La sortie idéale du code sera qu'il ne sort pas de la boucle principale jusqu'à TSS> VSS (l'utilisateur continue d'entrer des valeurs jusqu'à ce que la condition soit remplie) et j'obtiens les entrées dans deux variables différentes, à savoir valVSS et valTSS que je peux utiliser plus tard .

from tkinter import *
root = Tk()  # Create Root Window
root.title("Virtual Sieve Inputs - Screen 2")  # Popup screen title
root.geometry("900x900")  # Screen Dimensions

# Create Variables for later to get the data out.
valTSS = StringVar()
valVSS = StringVar()
# Assigning default values to the variables
valTSS.set(0.2)
valVSS.set(0.1)

def TSS():
  num = (my_boxTSS.get())
  try:
    valTSS = float(num)  #Accepts an float or integer
    answer.config(text='That is a valid TSS number')
    print(valTSS)
  except ValueError:
    answer.config(text='Please enter a valid number for TSS')

def VSS():
  num = (my_boxVSS.get())
  #my_boxVSS.quit()
  try:
    valVSS = float(num)  #Accepts an float or integer
    answer1.config(text='That is a valid VSS number')
    print(valVSS)
  except ValueError:
    answer1.config(text='Please enter a valid number for VSS')


my_labelTSS = Label(root, text="Enter TSS value in mg/L :")
my_labelTSS.pack(pady=20)
my_boxTSS= Entry(root)
my_boxTSS.pack(pady=10)
my_buttonTSS= Button(root, text="Enter TSS value in mg/L", command=TSS)
my_buttonTSS.pack(pady=5)
answer=Label(root, text='')
answer.pack(pady=20)

my_labelVSS = Label(root, text="Enter VSS value in mg/L :")
my_labelVSS.pack(pady=20)
my_boxVSS= Entry(root)
my_boxVSS.pack(pady=10)
my_buttonVSS= Button(root, text="Enter VSS value in mg/L", command=VSS)
my_buttonVSS.pack(pady=5)
answer1=Label(root, text='')
answer1.pack(pady=20)


#ideally following two lines should show up only when (valTSS)>(valVSS). Until the condition is met, the user should be prompted to enter values
 
next_button = Button(root, text="Next", command=root.destroy) # escape the mainloop only when the condition is met
next_button.pack(pady=20)

root.mainloop()

print('\n',valTSS,valVSS) # so valTSS and valVSS could be used later in the code

Answers

Le code en dehors de root.mainloop () ne s'exécutera qu'une fois la fenêtre Tkinter terminée. déplacer l'impression au-dessus de root.mainloop ()

print('\n',valTSS,valVSS)
root.mainloop()

Related