Pb de récupération de valeur Entry dans fenêtre secondaire [Résolu]

Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
Bonjour à tous,
J'ai un problème qui persiste sur un code concernant la récupération de valeur d'"entry" ou pour un "checkbutton" dans une fenêtre secondaire.
J'ai beau utilisé ?.get() pour récupérer la valeur, mais l'erreur dit que mes variables ? n'existent pas hors elles ont été déclarées dans une fonction juste avant.

J'ai déjà réussi à récupérer des valeurs d'une fonction à une autre mais c'était dans une fenêtre principale (mainloop).

Auriez-vous une idée du problème?

Merci d'avance pour votre aide
Afficher la suite 

1 réponse

0
Merci
Bonjour,

Il faudrait que tu montres un exemple de code reproductible et simplifié, car on ne peut imaginer ce que tu as fait et où se situent tes erreurs.
LPAUC
Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
Voici le code simplifier:
Dans la première fenêtre veuillez cliquer sur Mag.
Ensuite dans la fenêtre, aller dans File --> Filtrer
LPAUC
Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
from tkinter import *
from tkinter import filedialog
from tkinter import *
from tkinter import filedialog
import shutil
from tkinter.messagebox import *
from bokeh.plotting import *
from bokeh.io import output_notebook
from bokeh.models import LinearColorMapper, BasicTicker, ColorBar
from ipywidgets import interact
from scipy.interpolate import griddata
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

Topo,Long,Lat,Mag=[],[],[],[]

class mclassGravi:
def __init__(self,window):
self.window = window
self.window.minsize(780,420)
self.window.title("MAG - Sixense Engineering")
self.window.iconbitmap("SixenseLogo.ico")
Label(window,text="fonctionne pas")
class mclassMag:
def __init__(self,window):
self.window = window
self.window.minsize(780,420)
self.window.title("MAG - Sixense Engineering")
self.window.iconbitmap("SixenseLogo.ico")
menubar = Menu(window)
menu1 = Menu(menubar, tearoff=0)
global Data

menu1.add_command(label="Filtrer", command=self.Filt_WD)
menu1.add_command(label="Quitter", command=self.quit1)
menubar.add_cascade(label="File",menu=menu1)
self.window.config(menu=menubar)
def Filt_WD(self):
global vv1,vv2,vv3,vv4
windowFilt_WD=Tk()
self.windowFilt_WD=windowFilt_WD
self.windowFilt_WD.geometry("300x130")
self.windowFilt_WD.title("Filter - Config Window")
self.windowFilt_WD.iconbitmap("SixenseLogo.ico")
vv1,vv2,vv3,vv4=IntVar(),IntVar(),DoubleVar(),DoubleVar()
Check1=Checkbutton(windowFilt_WD, text = "HP", variable = vv1, onvalue = 1, offvalue = 0).grid(row=2, column=1)
self.label=Label(windowFilt_WD,text="f (Hz): ").grid(row=3, column=1)
minF=Entry(windowFilt_WD,textvariable=vv3).grid(row=3, column=2)

Check2=Checkbutton(windowFilt_WD, text = "LP", variable = vv2, onvalue = 1, offvalue = 0).grid(row=5, column=1)
self.label=Label(windowFilt_WD,text="f (Hz): ").grid(row=6, column=1)
maxF=Entry(windowFilt_WD,textvariable=vv4).grid(row=6, column=2)
self.button=Button (windowFilt_WD, text="Apply", command=self.Filt).grid(row=8, column=2)
self.button=Button (windowFilt_WD, text="OK", command=self.quit9).grid(row=8, column=3)

def Filt(self):
Checkvar1,Checkvar2=vv1.get(),vv2.get()
minF,maxF=vv3.get(), vv4.get()
#Filtrage Data
if minF==0 and Checkvar1==1:
showerror("Alerte", "La fréquence minimale ne peut être égale à zéro.\nVeuillez modifier la valeur!!!")
elif minF==0 and maxF==0 and Checkvar1==1 and Checkvar2==1:
showerror("Alerte", "La fréquence minimale et maximale ne peuvent être égale à zéro.\nVeuillez modifier les valeurs!!!")
elif maxF==0 and Checkvar1==1:
showerror("Alerte", "La fréquence maximale ne peut être égale à zéro.\nVeuillez modifier la valeur!!!")
elif Checkvar1==1 and Checkvar2==0:
print(minF,maxF, Checkvar1,Checkvar2)
elif Checkvar1==0 and Checkvar2==1:
print(minF,maxF, Checkvar1,Checkvar2)
elif Checkvar1==1 and Checkvar2==1:
print(minF,maxF, Checkvar1,Checkvar2)
else:
showinfo("Alerte", "Problème avec les paramètres de filtrage!!!")

def quit1 (self):
self.window.destroy()
def quit9 (self):
self.windowFilt_WD.destroy()

def mag():
windowMagOrGravi.destroy()
window=Tk()
start=mclassMag(window)
window.geometry("1000x550")
window.mainloop()
def gravi():
windowMagOrGravi.destroy()
window=Tk()
start=mclassGravi(window)
window.geometry("1000x550")
window.mainloop()


windowMagOrGravi=Tk()
windowMagOrGravi.title("MagGrav - Sixense Engineering")
windowMagOrGravi.iconbitmap("SixenseLogo.ico")
Label(windowMagOrGravi,text=" \n \n \n \n \n \n \n").grid(row=1, column=1)
Label(windowMagOrGravi,text=" ").grid(row=2, column=1)
button1=Button (windowMagOrGravi, text="Mag", command=mag).grid(row=2, column=2)
Label(windowMagOrGravi,text=" ").grid(row=2, column=3)
button2=Button (windowMagOrGravi, text="Gravi", command=gravi).grid(row=2, column=4)
Label(windowMagOrGravi,text=" ").grid(row=2, column=5)
Label(windowMagOrGravi,text=" \n \n \n \n \n \n \n").grid(row=3, column=1)
windowMagOrGravi.mainloop()
> LPAUC
Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
On a pas la même notion du simple et reproductible.
Et en l'état ton code ressemble à un gros pavé de texte illisible, c'est pour cela que les forums fournissent des balises codes afin de rendre un code lisible, ici c'est le bouton <>.

Une fenêtre secondaire d'une fenêtre principale se fait avec Toplevel pas en définissant d'autres fenêtres principales Tk.

def open_window():
    win = tk.Toplevel(root)
    entry = tk.Entry(win, textvariable=var_i).pack()    
    
root = tk.Tk()
var_i = tk.IntVar()

tk.Button(root, text='open window', command=open_window).pack()
tk.Button(root, text='show var', command=lambda: print(var_i.get())).pack()

root.mainloop()


Qui fonctionne parfaitement tant que l'on entre bien un entier *
Remplace
win = tk.Toplevel(root)
par
win = tk.Tk()
et tu obtiendras le même problème que tu as.
  • Pour valider une saisie, Entry propose les paramètres validate et validatecommand afin d'autoriser la saisie de valeurs.
LPAUC
Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
Pour être dans le contexte du code, j'ai pris une partie du code, par contre pour la visualisation sur le message, je n'ai pas pris le temps de vérifier que les indentations étaient bien respectées.
LPAUC
Messages postés
5
Date d'inscription
jeudi 28 novembre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
Merci pour ton aide!
Le problème venait d'une mauvaise gestion des fenêtres!

Désolé pour le manque de clarté du code!
Commenter la réponse de trifou