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” "