Se ejecutan funciones que no he llamado

Hola, en el siguiente código al iniciar el programa se imprimen tres datos (el mismo dato que está en el archivo num.txt) que deberían imprimirse sólo si hago click en “Gastos”, “Viáticos”, o “Viáticos Múltiples”.
Por qué sucede ésto? estoy llamando mal a las funciones? GRACIAS!

import tkinter as tk
from os import path
    
def numero():
    directorio = path.dirname(path.abspath(__file__))
    archivo = path.join(directorio,"num.txt")
    datos = open(archivo)
    num = datos.read()
    print(num)
    datos.close()
    
def gastos():
    numero()
    
def viaticos():
    numero()
    
def viatimulti():
    numero()
    
def leer():
    pass

def cambiar():
    pass

def imprimir():
    pass

def fildeta():
    pass

def filjusti():
    pass

def filsoli():
    pass

def filpreun():
    pass

def filpreto():
    pass

#ventana principal
ventana=tk.Tk()
ventana.title("programa - v0.2")
ventana.geometry('+0+0')
ventana.geometry('800x600')
ventana.resizable(False, False)

#barra de menu
barra_menus = tk.Menu()
menu_archivo = tk.Menu(barra_menus, tearoff=False)
barra_menus.add_cascade(menu=menu_archivo, label="Archivo")
menu_nuevo = tk.Menu(menu_archivo, tearoff=False)
menu_nuevo.add_command(label="Gastos", accelerator="Ctrl+G", compound=tk.LEFT)
ventana.bind_all("<Control-g>", gastos())
menu_nuevo.add_separator()
menu_nuevo.add_command(label="Viáticos", accelerator="Ctrl+V", compound=tk.LEFT)
ventana.bind_all("<Control-v>", viaticos())
menu_nuevo.add_separator()
menu_nuevo.add_command(label="Viáticos Múltiples", accelerator="Ctrl+M", compound=tk.LEFT)
ventana.bind_all("<Control-m>", viatimulti())
menu_abrir = tk.Menu(menu_archivo, tearoff=False)
menu_abrir.add_command(label="Visualizar", accelerator="Ctrl+L", compound=tk.LEFT)
ventana.bind_all("<Control-l>", leer())
menu_abrir.add_separator()
menu_abrir.add_command(label="Modificar", accelerator="Ctrl+C", compound=tk.LEFT)
ventana.bind_all("<Control-c>", cambiar())
menu_abrir.add_separator()
menu_filtrar = tk.Menu(menu_abrir, tearoff=False)
menu_filtrar.add_command(label="Detalle", accelerator="Ctrl+D", compound=tk.LEFT)
ventana.bind_all("<Control-d>", fildeta())
menu_filtrar.add_separator()
menu_filtrar.add_command(label="Justificación", accelerator="Ctrl+J", compound=tk.LEFT)
ventana.bind_all("<Control-j>", filjusti())
menu_filtrar.add_separator()
menu_filtrar.add_command(label="Solicitante", accelerator="Ctrl+S", compound=tk.LEFT)
ventana.bind_all("<Control-s>", filsoli())
menu_filtrar.add_separator()
menu_filtrar.add_command(label="Precio Unitario", accelerator="Ctrl+U", compound=tk.LEFT)
ventana.bind_all("<Control-u>", filpreun())
menu_filtrar.add_separator()
menu_filtrar.add_command(label="Precio Total", accelerator="Ctrl+T", compound=tk.LEFT)
ventana.bind_all("<Control-t>", filpreto())
#menu_filtrar.add_separator()

# colocar acá todos los filtros que se deseen para establecer el resumen
menu_archivo.add_cascade(menu=menu_nuevo, label="Nevo Pedido...")
menu_archivo.add_separator()
menu_archivo.add_cascade(menu=menu_abrir, label="Abrir Pedido...")
menu_archivo.add_separator()
menu_archivo.add_command(label="Salir", command=ventana.destroy)
menu_abrir.add_cascade(menu=menu_filtrar, label="Filtrar por...")
ventana.config(menu=barra_menus)

ventana.mainloop()

Hola! Efectivamente estás ejecutando las funciones al ejecutar gastos(), viaticos(), viatimulti(). Probá pasando solamente el handler de las funciones al bindear los shortcuts a la ventana, así:

ventana.bind_all("<Control-g>", gastos)

1 me gusta

Muchas gracias por la ayuda. Ahora no me linkeaba a la función. Cuando presionaba por ejemplo en Gastos no entraba a la función gastos(). Me di cuenta que en la línea de add_command faltaba justamente command=función. Ahora anda perfecto. Muchas gracias!!!

1 me gusta