-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgui.py
152 lines (107 loc) · 5.65 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
from chatgpt import ChatGPT
import tkinter as tk
from PIL import ImageTk, Image
def chatbot_selection(n):
if n=="ChatBot_dummy":
chatbot = ChatBot_dummy()
if n=="ChatGPT":
chatbot = ChatGPT()
chatbot.start()
return chatbot
def main():
# Crear un chatbot
#chatbot = chatbot_selection("ChatBot_dummy")
chatbot = chatbot_selection("ChatGPT")
# Crear la ventana principal
ventana = tk.Tk()
ventana.title('ER-GPT')
ventana.geometry('500x800')
ventana.configure(bg='#FFFFFF')
# Crear el marco principal
marco_principal = tk.Frame(ventana, bg="#E1E1E1")
marco_principal.pack(fill=tk.BOTH, expand=True)
# Panel de sistema
marco_sistema = tk.Frame(marco_principal, bg="#E1E1E1", height=5)
marco_sistema.pack(fill=tk.BOTH, expand=False)
title_sistema= tk.Label(marco_sistema, text="SYSTEM", wraplength=250, bg="#333333", fg="white", padx=10, pady=5, font=("Arial", 11))
title_sistema.pack(fill=tk.BOTH, pady=(5,0), padx=(2, 17))
mensaje_sistema= tk.Label(marco_sistema, text="", wraplength=350, bg="#999999", padx=10, pady=5, font=("Arial", 11), height=5)
mensaje_sistema.pack(fill=tk.BOTH, pady=(0,5), padx=(2, 17))
# Crear canvas conversacion
canvas = tk.Canvas(marco_principal, bg="#333333")
canvas.pack(fill=tk.BOTH, expand=True)
#canvas.pack_propagate(0)
#canvas.config(width=300, height=500)
marco_conversacion = tk.Frame(canvas, bg="#333333")
marco_conversacion.pack(fill=tk.BOTH, expand=True)
canvas.create_window( (canvas.winfo_width()/ 2, canvas.winfo_height()/2), window=marco_conversacion, anchor="nw", width=480)
# Configurar el marco para que ocupe todo el ancho del canvas
marco_conversacion.columnconfigure(0, weight=1)
#scrollbar
scrollbar = tk.Scrollbar(canvas, orient=tk.VERTICAL)
scrollbar.config(command=canvas.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
canvas.config(yscrollcommand=scrollbar.set)
def scroll(event):
canvas.yview_scroll(-1*(event.delta//120), "units")
canvas.bind_all("<MouseWheel>", scroll)
# Cargar imagen del icono del chatbot y del usuario
image_chatbot = Image.open("images/chatbot.png")
image_chatbot = image_chatbot.resize((50, 50))
icon_chatbot = ImageTk.PhotoImage(image_chatbot)
image_user = Image.open("images/user.png")
image_user = image_user.resize((50, 50))
icon_user = ImageTk.PhotoImage(image_user)
# Crear el campo de entrada de texto
entrada_texto = tk.Entry(marco_principal, bd=0, bg="#F1F0F0", fg="#333", font=("Arial", 12))
entrada_texto.pack(fill=tk.X, pady=(10, 10), padx=20, ipady=10)
def enviar_mensaje(event=None):
mensaje_usuario = entrada_texto.get()
if mensaje_usuario:
# Crear el marco del usuario
marco_usuario = tk.Frame(marco_conversacion, bg="#333333")
marco_usuario.pack(padx=10, pady=5, anchor="e", fill=tk.BOTH)
# Crear una etiqueta para mostrar el nombre de usuario
#nombre_usuario_label = tk.Label(marco_usuario, text="Tú", font=("Arial", 11, "bold"), bg="#DCF8C6", fg="#333")
#nombre_usuario_label.pack(anchor="e", pady=5)
#mensaje_usuario_bocadillo = tk.Frame(marco_usuario, bg="#DCF8C6")
#mensaje_usuario_bocadillo.pack(padx=10, pady=5, anchor="e")
mensaje_usuario_label= tk.Label(marco_usuario, text=mensaje_usuario, wraplength=250, bg="#DCF8C6", padx=10, pady=5, font=("Arial", 11), anchor="e")
mensaje_usuario_label.pack(anchor="e", pady=5)
entrada_texto.delete(0, tk.END)
# Hacer scroll hasta el final de la ventana
marco_principal.update_idletasks()
# Crear una etiqueta para mostrar la imagen del usuario
imagen_usuario_label = tk.Label(marco_usuario, image=icon_user, bg="#E1E1E1")
imagen_usuario_label.image = icon_user
imagen_usuario_label.pack(side=tk.RIGHT)
#marco_principal.yview_moveto(1)
# Esperar un momento antes de enviar la respuesta del chatbot
ventana.after(10, enviar_respuesta_chatbot, mensaje_usuario)
def enviar_respuesta_chatbot(mensaje_usuario):
mensaje_chatbot, system_chatbot = chatbot.response(mensaje_usuario) #"Hola, soy un chatbot y he recibido tu mensaje"
# Mensaje SYSTEM
mensaje_sistema.config(text=system_chatbot)
# Crear el marco del chatbot
marco_chatbot = tk.Frame(marco_conversacion, bg="#333333")
marco_chatbot.pack(padx=10, pady=(10, 5), anchor="w")
mensaje_chatbot_label = tk.Label(marco_chatbot, text=mensaje_chatbot, wraplength=250, bg="#F1F0F0", padx=10, pady=5, font=("Arial", 11), anchor="w")
mensaje_chatbot_label.pack(anchor="w", pady=5)
# Crear una etiqueta para mostrar la imagen del chatbot
imagen_chatbot_label = tk.Label(marco_chatbot, image=icon_chatbot, bg="#E1E1E1")
imagen_chatbot_label.image = icon_chatbot
imagen_chatbot_label.pack(side=tk.LEFT)
#Crear el botón de enviar
boton_enviar = tk.Button(marco_principal, text="Enviar", bg="#007AFF", fg="#FFF", font=("Arial", 12, "bold"), bd=0, command=enviar_mensaje)
boton_enviar.pack(pady=(0, 10), padx=10, anchor="e")
# Asociar la tecla Enter con la función responder
entrada_texto.bind('<Return>', enviar_mensaje)
#Ejecutar la ventana
ventana.mainloop()
class ChatBot_dummy():
def start(self):
pass
def response(self, mensaje_usuario):
return "Soy un chatbot y te escucho. Tu mensaje ha sido el siguiente: " + mensaje_usuario, "SYSTEM MESSAGE"
if __name__ == "__main__":
main()