Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
TclError: invalid command name ".!entry" (tkinter)
#1
Sad 
gente pues si me pueden ayudar con este programa, el tema es que es con interfaz grafica, y en la parte del principal() tengo una variable llamada Pc y otra llamada Z, ambas son muy importantes para los cálculos que se realizan mas adelante, el caso es que estas variables agarran los datos de las interfaces de "numero de dientes" y la sección de paso circular, para la variable pc, si permite agarrar el dato ingresado, sin embargo Z no lo agarra y presenta el error !=Entry. para ver si alguien me colabora.

en caso de que me ayuden, corran el programa  y en las interfaces coloquen como valores 1 en cada ventana, cuando se abra la de paso circular o modulo, seleccionen paso circular, y de igual modo ingresan un 1.
gracias de antemano, estare pendiente.

Código:
from ast import Mod
from tkinter import*
from tkinter import messagebox
import tkinter as tk
import math
from webbrowser import get
pi=math.pi
Dp=0.0
M=0
Pc=0
Z=0.0
De=0.0
S=0.0
W=0.0
Di=0.0
PieDiente=0.0
CabezaDiente=0.0
AlturaDiente=0.0
ModOK=0.0
PcOK=0.0
k=0

NumEngra=0
Paso=""
PasoC=""
Determinante=0
PasoMod=""
PasoPaso=""
Engr=0
def Principal():
   
    Pc=float(entradaPaso.get())
    Z=float(entradaDientes.get())   

    if Pc>0:
        M=Pc/(math.pi)       
        Dp=Z*ModOK
        De=Dp+2*ModOK
        S=(Pc*19)/40
        W=(Pc*21)/40
        Di=Dp-(2*1.25*(M))
        PieDiente=1.250*(M)
        CabezaDiente=M
        AlturaDiente=(2.25*M)

    else:
        Dp=(Z)*(ModOK)
        PcOK=(math.pi)*(ModOK)
        De=(Dp)+2*(ModOK)
        S=((PcOK)*19)/40
        W=((PcOK)*21)/40
        Di=Dp-(2*1.25*(ModOK))
        PieDiente=1.250*(ModOK)
        CabezaDiente=M
        AlturaDiente=(2.25*(ModOK))

    print ("Número de dientes: ", Z)
    print ("Módulo: ", M)
    print ("Paso circular: ", Pc)
    print ("Diametro primitivo: ", Dp)
    print ("Grueso del diente: ", S)
    print ("Hueco del diente: ", W)
    print ("Diámetro interior: ", Di)
    print ("Pie del diente: ", PieDiente)
    print ("Cabeza del diente: ", CabezaDiente)
    print ("Altura del diente: ", AlturaDiente)






#RECORDATORIO AL USUARIO
def Bienvenida ():
    messagebox.showinfo(message="Bienvenido a la calculadora de geometria de engranajes rectos. Recuerde que las unidades de medida introducidas serán coincidentes con los resultados.", title="Información")
Bienvenida()
def pregengranajes():
    global entradaEngranajes
    VentEngr=Tk()
    VentEngr.title("Número de engranajes")
    VentEngr.geometry ("400x200+20+10")
    textoEngr=Label(VentEngr, text = "Introduzca cuantos engranajes desea crear: ").grid(row=0,
                                                column=0, sticky = NW)
                                               
    entradaEngranajes=Entry(VentEngr)
    entradaEngranajes.grid(row=0, column=1,padx=10, pady=10, sticky=NW)
    btnEngr=Button(VentEngr, text="Confirmar", command=VentEngr.destroy)
    btnEngr.place(x=80, y=100)
    VentEngr.columnconfigure(1, weight=1, minsize=75)
    VentEngr.rowconfigure(0, weight=1, minsize=50)
   
    VentEngr.mainloop()
    return(entradaEngranajes)
pregengranajes()
def numdientes():
    global entradaDientes
    VentDien=Tk()
    VentDien.title("Número de dientes")
    VentDien.geometry ("450x200+20+10")
    textoDien=Label(VentDien, text = "Introduzca cuantos dientes desea que el engranaje tenga: ").grid(row=0,
                                                column=0, sticky = NW)
    entradaDientes=Entry(VentDien)
    entradaDientes.grid(row=0, column=1,padx=10, pady=10, sticky=NW)
    btnDien=Button(VentDien, text="Confirmar", command=VentDien.destroy)
    btnDien.place(x=80, y=100)
    VentDien.columnconfigure(1, weight=1, minsize=75)
    VentDien.rowconfigure(0, weight=1, minsize=50)
   
    VentDien.mainloop()
    return entradaDientes
numdientes()
def pasomodulo():
    VentQuest=Tk()
    VentQuest.title("¿Paso o Modulo?")
    VentQuest.geometry ("400x200+20+10")
    textoPasoModu=Label(VentQuest, text = "Por favor indique si desea usar el módulo o el paso para los cálculos").grid(row=0,column=0, sticky = "w")
    btnVentQuestPaso=Button(VentQuest, text="Paso Circular", command=detPasoCircular)
    btnVentQuestPaso.place(x=40, y=100)
    btnVentQuestModulo=Button(VentQuest, text="Módulo", command=detModulo)
    btnVentQuestModulo.place(x=200, y=100)
    VentQuest.mainloop()

def detPasoCircular():
    global VentPaso
    global entradaPaso
    VentPaso=Tk()
    VentPaso.title("Número de dientes")
    VentPaso.geometry ("450x200+20+10")

    textoPaso=Label(VentPaso, text = "Introduzca el valor del paso circular: ").grid(row=0,
                                                        column=0, sticky = NW)

    entradaPaso=Entry(VentPaso)
    entradaPaso.grid(row=0, column=1,padx=10, pady=10, sticky=NW)

    btnPaso=Button(VentPaso, text="Confirmar", command=Principal)
    btnPaso.place(x=80, y=100)

    VentPaso.columnconfigure(1, weight=1, minsize=75)
    VentPaso.rowconfigure(0, weight=1, minsize=50)

    VentPaso.mainloop()
    return entradaPaso




###SI ESCOGE MODULO

def detModulo():
    global entradaModulo
    global VentModulo
    VentModulo=Tk()
    VentModulo.title("Número de dientes")
    VentModulo.geometry ("450x200+20+10")

    textoModulo=Label(VentModulo, text = "Introduzca el valor del módulo: ").grid(row=0,
                                                        column=0, sticky = NW)
                                                       

    entradaModulo=Entry(VentModulo)
    entradaModulo.grid(row=0, column=1,padx=10, pady=10, sticky=NW)

    btnModulo=Button(VentModulo, text="Confirmar", command=Principal)
    btnModulo.place(x=80, y=100)

    VentModulo.columnconfigure(1, weight=1, minsize=75)
    VentModulo.rowconfigure(0, weight=1, minsize=50)

    VentModulo.mainloop()
    return entradaModulo

pasomodulo()
Responder
#2
Hola, bienvenido.

Por favor, para la próxima usá un título representativo de tu problema y ubicalo en el subforo correcto (en este caso, Aplicaciones de escritorio). Yendo a tu código, el principal problema que veo es que estás creando múltiples ventanas usando tk.Tk(). Solo la ventana principal debería crearse de esa manera; todas las ventanas secundarias deben usar tk.Toplevel(). Te dejo un artículo para que entiendas cómo funciona: https://recursospython.com/guias-y-manua...s-tkinter/. Tampoco creo que sea necesario usar tantas ventanas en este caso: podés poner todos los controles dentro de una misma ventana y va a ser mucho más fácil.

Otro problema es el uso innecesario de funciones. Eso está haciendo que el código quede muy disperso. En este caso te conviene usar funciones solo cuando sea necesario (por ejemplo, cuando haya que asociar un código a un botón). Muchas de las variables que estás creando dentro de tus funciones se borran de la memoria automáticamente cuando las funciones retornan, haciendo que después Tk tire errores como los que indica el título. Además, líneas como estas:

Código:
textoModulo=Label(VentModulo, text = "Introduzca el valor del módulo: ").grid(row=0, column=0, sticky = NW)

son incorrectas. La forma apropiada es:

Código:
textoModulo=Label(VentModulo, text = "Introduzca el valor del módulo: ")
textoModulo.grid(row=0, column=0, sticky = NW)

Parece indistinto, pero en el primer caso estás asociando a textoModulo el resultado de grid(), que no es precisamente una referencia al control que acabás de crear.

Creo que haciendo esos arreglos vas a poder avanzar. Comentanos cómo te fue.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)