Messagebox.askokcancel

Cuando se ejecuta ese programa debería salir el titulo “Error de datos” en la caja del messsagebox el cual no aparece y sale el cohete logotipo de python, que puedo hacer para solucionarlo?. Gracias

from tkinter import *
from tkinter import messagebox
import tkinter as tk
ventana = tk.Tk()

ventana.title(“nombre de prueba”)
ventana.geometry(“800x700”)

def envia():

ocion =   messagebox.askyesno("Error de datos","Desea Continuar")  
print(ocion)
boton = tk.Button(text="ocion")

print(repuesta)

boton = tk.Button(text=“presione”, command=envia) # command llama la funcion
boton.place(x=50,y=105)

hace poco tuve un problema parecido, e indagüe en profundidad y al parecer no es problema de python sino de tkinter, En TCL, existe originalmente la funcion tk_messageBox con las opciones -type que pueden ser: “abortretryignore,ok,okcancel,retrycancel,yesno,yesnocancel”
tambien acepta los diferentes iconos por defecto “error, info , question , warning”
sinembargo como python no permite evaluar cadenas de la misma forma que TCL, tuvieron que dejarse los tipos encadenados a sus propios iconos

Tkinter actúa como una interfaz entre Python y el toolkit TCL. Internamente, Tkinter traduce llamadas a funciones de Python en comandos Tcl que se ejecutan en un intérprete Tcl. Esto significa que, aunque Tkinter utiliza el mismo código C subyacente que Tcl/Tk, las funcionalidades se exponen de manera diferente debido a la capa de envoltura

como python no puede traducir todos los scripts de tcl , debe limitarse en las opciones que en TCL permite al comando messageBox hacer 24 diferentes tipos de mensajes en cada Sistema Operativo.

una demostración de esto esta en que tkinter puede hacer diferente tipo de mensajes con codigo de TCL que es mucho mas corto que el codigo de python, pero para hacerlo con python, no puede mezclar los iconos, y estos estan asignados desde el codigo de C un icono con cada tipo showinfo , showerror , askquestion , showwarning

En el siguiente ejemplo una sola funcion de TCL hace todos los mensajes posibles:

import tkinter as tk
w=tk.Tk()
code_tcl=‘’’
proc tmsg {{txt “”} {type “ok”} {img “info”}} {return [tk_messageBox -message $txt -type $type -icon $img]}

tmsg “Funcion de error” “yesno” “info”
tmsg "Funcion de error “yesnocancel” “error”
‘’’
w. eval(code_tcl)
w.mainloop()

la funcion tmsg de TCL recibe tres argumentos: el primero es el texto del mensaje; el segundo dato es el tipo de mensaje por defecto “ok” pueden ser: “yesno” “ok” “okcancel” "