86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk
|
|
from tkinter import messagebox
|
|
import threading
|
|
import time
|
|
import datetime
|
|
|
|
def update_time(status_bar):
|
|
"""Función que actualiza la hora y el día de la semana en un label"""
|
|
while True:
|
|
# Obtener la fecha y hora actual
|
|
now = datetime.datetime.now()
|
|
day_of_week = now.strftime("%A") # Día de la semana
|
|
time_str = now.strftime("%H:%M:%S") # Hora en formato HH:MM:SS
|
|
date_str = now.strftime("%Y-%m-%d") # Fecha en formato YYYY-MM-DD
|
|
label_text = f"{day_of_week}, {date_str} - {time_str}"
|
|
|
|
# Actualizar el label (debemos usar `after` para asegurarnos que se actualice en el hilo principal de Tkinter)
|
|
status_bar.after(1000, status_bar.config, {"text": label_text})
|
|
|
|
# Espera 1 segundo antes de actualizar de nuevo
|
|
time.sleep(1)
|
|
|
|
def main():
|
|
# Crear ventana principal
|
|
root = tk.Tk()
|
|
root.title("Aplicación con Menú y Layout")
|
|
root.geometry("1600x600") # Dimensiones de la ventana
|
|
|
|
# Configuración del Menú Superior
|
|
menubar = tk.Menu(root, font=("Helvetica", 16))
|
|
|
|
# Menú "Archivo"
|
|
file_menu = tk.Menu(menubar, tearoff=0)
|
|
file_menu.add_command(label="Nuevo", command=lambda: messagebox.showinfo("Nuevo", "Nueva opción seleccionada"))
|
|
file_menu.add_command(label="Abrir", command=lambda: messagebox.showinfo("Abrir", "Abrir opción seleccionada"))
|
|
file_menu.add_separator()
|
|
file_menu.add_command(label="Salir", command=root.quit)
|
|
menubar.add_cascade(label="Archivo", menu=file_menu)
|
|
|
|
# Menú "Editar"
|
|
edit_menu = tk.Menu(menubar, tearoff=0)
|
|
edit_menu.add_command(label="Copiar", command=lambda: messagebox.showinfo("Copiar", "Copiar opción seleccionada"))
|
|
edit_menu.add_command(label="Pegar", command=lambda: messagebox.showinfo("Pegar", "Pegar opción seleccionada"))
|
|
menubar.add_cascade(label="Editar", menu=edit_menu)
|
|
|
|
# Menú "Ayuda"
|
|
help_menu = tk.Menu(menubar, tearoff=0)
|
|
help_menu.add_command(label="Acerca de", command=lambda: messagebox.showinfo("Acerca de", "Versión 1.0"))
|
|
menubar.add_cascade(label="Ayuda", menu=help_menu)
|
|
|
|
# Configurar la barra de menú
|
|
root.config(menu=menubar)
|
|
|
|
# Barra de estado
|
|
status_bar = tk.Label(root, text="Hilo fecha-hora", font=("Helvetica", 16), bd=1, fg="blue", relief="sunken", anchor="w")
|
|
status_bar.pack(side="bottom", fill="x",pady=2)
|
|
|
|
# Frame lateral
|
|
sidebar_frame = tk.Frame(root, width=600, bg="lightgray")
|
|
sidebar_frame.pack(side="left", fill="y")
|
|
|
|
# Frame principal
|
|
main_frame = tk.Frame(root, bg="white")
|
|
main_frame.pack(side="right", expand=True, fill="both")
|
|
|
|
|
|
|
|
# Etiquetas de ejemplo en los Frames
|
|
sidebar_label = tk.Label(sidebar_frame, text="Panel Lateral", bg="lightgray")
|
|
sidebar_label.pack(padx=10, pady=10)
|
|
|
|
main_label = tk.Label(main_frame, text="Panel Principal", bg="white")
|
|
main_label.pack(padx=10, pady=10)
|
|
|
|
update_thread = threading.Thread(target=update_time, args=(status_bar,))
|
|
update_thread.daemon = True # Hacemos el hilo un demonio para que termine con la app
|
|
update_thread.start()
|
|
|
|
|
|
# Ejecutar el bucle principal
|
|
root.mainloop()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|