Hello I am trying to write a chatbot which takes the follow input : name and last name The idea is that when the user click the "Send" button the input is stored in a "name" variable. The text box is cleared and when the user click the button again the new input should go into another variable "lastname". How can I achieve that? I would like to print "Hello name lastname" inside the chatbot's GUI
This is what I have so far :
from tkinter import * #GUI library a
import sys
root = Tk() #create a tkinter object which represents the parent window
root.title("Chat Bot")
root.geometry("400x500")
root.resizable(width=FALSE, height=FALSE)
chatWindow = Text(root, bd=1, bg="black", width="50", height="8", font=("Arial", 12), foreground="#00ffff") #create a window for the conversation and place it on the parent window
chatWindow.place(x=6,y=6, height=385, width=370)
messageWindow = Text(root, bd=0, bg="black",width="30", height="4", font=("Arial", 23), foreground="#00ffff") #create the text area where the message will be entered and place it on the parent window
messageWindow.place(x=128, y=400, height=88, width=260)
def get():
name = messageWindow.get('1.0', END) #"1.0" means that the input should be read from line one, character zero (ie: the very first character). END is an imported constant which is set to the string "end". The END part means to read until the end of the text box is reached.
messageWindow.delete('1.0', END)
Button= Button(root, text="Send", command = get, width="12", height=5,
bd=0, bg="#0080ff", activebackground="#00bfff",foreground='#ffffff',font=("Arial", 12))
Button.place(x=6, y=400, height=88) #create button to send the message and place it in the parent window
#Whenever I am calling print) I am actually calling sys.stdout.write() so with this function redirector which redirect the print() to the GUI
def redirector(inputStr):
chatWindow.insert(INSERT, inputStr)
sys.stdout.write = redirector #whenever sys.stdout.write is called, redirector is called.
print("Hello, I am your awesome assistant today. \n")
print("Please enter your name and last name. \n")
root.mainloop()
CodePudding user response:
I looked at your problem and organized your code. you can solve the problem by creating another function and calling it in get()
. you can check if a variable is empty with the stament len()
. then your code will be like this:
import sys
name = ""
last_name = ""
def react(text):
global name
global last_name
if len(name) == 0:
name = text
elif len(last_name) == 0:
last_name = text
print(f"hello {name} {last_name}")
def get():
name = messageWindow.get('1.0', END) # "1.0" means that the input should be read from line one, character zero (ie: the very first character). END is an imported constant which is set to the string "end". The END part means to read until the end of the text box is reached.
messageWindow.delete('1.0', END)
name = name[0:-1]
react(name)
# Whenever I am calling print() I am actually calling sys.stdout.write() so with this function redirector which redirect the print() to the GUI
def redirector(inputstr):
chatWindow.insert(INSERT, inputstr)
sys.stdout.write = redirector # whenever sys.stdout.write is called, redirector is called.
root = Tk() # create a tkinter object which represents the parent window
root.title("Chat Bot")
root.geometry("400x500")
root.resizable(width=FALSE, height=FALSE)
chatWindow = Text(root, bd=1, bg="black", width="50", height="8", font=("Arial", 12), foreground="#00ffff") # create a window for the conversation and place it on the parent window
chatWindow.place(x=6, y=6, height=385, width=370)
messageWindow = Text(root, bd=0, bg="black", width="30", height="4", font=("Arial", 23), foreground="#00ffff") # create the text area where the message will be entered and place it on the parent window
messageWindow.place(x=128, y=400, height=88, width=260)
Button = Button(root, text="Send", command=get, width="12", height=5, bd=0, bg="#0080ff", activebackground="#00bfff", foreground='#ffffff', font=("Arial", 12))
Button.place(x=6, y=400, height=88) # create button to send the message and place it in the parent window
print("Hello, I am your awesome assistant today. \n")
print("Please enter your name and last name. \n")
root.mainloop()