Home > Blockchain >  How to take user input and store in variable using tkinter?
How to take user input and store in variable using tkinter?

Time:09-17

This is a college enquiry chatbot, I want to get users name and display in the chat window.

Click here to view the output window

On the output window, I want the student's name instead of "Student". I have added only some code that I think is important. If you want full code comment below, I'll edit the question

def _on_enter_pressed(self, event):
    msg = self.msg_entry.get()
    self._insert_message(msg,"Student")
    
def _insert_message(self, msg, sender):
    if not msg:
        return
    
    self.msg_entry.delete(0, END)
    msg1 = f"{sender}: {msg}\n\n"
    self.text_widget.configure(state=NORMAL)
    self.text_widget.insert(END, msg1)
    self.text_widget.configure(state=DISABLED)
    
    msg2 = f"{bot_name}: {get_response(msg)}\n\n"
    self.text_widget.configure(state=NORMAL)
    self.text_widget.insert(END, msg2)
    self.text_widget.configure(state=DISABLED)
    
    self.text_widget.see(END)

CodePudding user response:

As the two other commentors mention:

studentName = self.student_entry.get()
self._insert_message(msg,studentName)

where student_entry is a tk.Entry(). But you could get studentName from anywhere else in the code.

CodePudding user response:

I'm not sure what kind of user interface you want to have, but one way to get the user's input in by using one of the simple dialogs included in tkinter. Below is a modified version of you code with the changes needed to add a Button to invoke one, get the string entered, and use it. I've indicated where the changes were made with all caps # ADDED and # CHANGED comments.

from tkinter import *
from tkinter.simpledialog import askstring  # ADDED
from chat import get_response, bot_name
import webbrowser


class ChatApplication:
    def __init__(self):
        self.window = Tk()
        self._setup_main_window()
        self.sname = "Anonymous"  # ADDED
        #Icon
        self.window.wm_iconbitmap("DSU.ico")

    def run(self):
        self.window.mainloop()

    def _setup_main_window(self):
        self.window.title("DSU Chat-Bot")
        self.window.resizable(width=False, height=False)
        self.window.configure(width=1000, height=600)
        self.canvas = Canvas(self.window,bg="#475F47",height = 600,width = 1000,bd = 0,highlightthickness = 0,
        relief = "ridge")
        self.canvas.place(x = 0, y = 0)

        #Bot Image
        global bot_img
        bot_img = PhotoImage(file=f"college.png")
        bot = self.canvas.create_image(500,300,image=bot_img)

        #DSU Logo
        global dsu_logo
        dsu_logo = PhotoImage(file=f"DSU.png")
        dsu = self.canvas.create_image(490,90,image=dsu_logo)

        #100 years Logo
        global centenary_logo
        centenary_logo = PhotoImage(file=f"logo.png")
        centenary = self.canvas.create_image(950,100,image=centenary_logo)

        #DSU Text
        self.canvas.create_text(
        556.0,16.0,anchor="nw",
        text="Dayananda Sagar University  \n",
        fill="#FFFFFF",font=("Revalia",15))

        #Text
        self.canvas.create_text(
        650.0,60.0,anchor="nw",
        text="Live the Dream!",
        fill="#FFFFFF",font=("Revalia", 13))

        #Link Button
        dsu_link=Label(self.window,bg="#475F47",fg="blue",text="www.dsu.edu.in",pady=10,cursor="hand2",font=("Revalia",15))
        dsu_link.pack()
        dsu_link.bind("<Button-1>",lambda e:
        self.callback("https://www.dsu.edu.in/"))
        dsu_link.place(x=635,y=93,width=198,height=34)

        # Enter name button - ADDED
        name_btn = Button(text='Enter your name', command=self._get_sname, bg="#C9EDFF",
                          fg="blue")
        name_btn.place(x=420, y=165)

        # text widget
        self.text_widget = Text(self.window, width=20, height=2, bg="#222831", fg="#FFFFFF",
                                padx=5, pady=5)
        self.text_widget.place(x=420,y=192,width=571,height=307)
        msg3 = f"{bot_name}: Hey there.Welcome to Dayananda Sagar  University \nLive the Dream!\nHow can I help you?\n"
        self.text_widget.insert(END,msg3)
        self.text_widget.configure(cursor="arrow", state=DISABLED)

        # scroll bar
        scrollbar = Scrollbar(self.text_widget)
        scrollbar.place(relheight=1, relx=0.984,width=10)
        scrollbar.configure(command=self.text_widget.yview)

        # message entry box
        self.msg_entry = Entry(self.window, bg="#C9EDFF", font="Abadi")
        self.msg_entry.place(x=420,y=515,width=418,height=60)
        self.msg_entry.focus()
        self.msg_entry.bind("<Return>",self._on_enter_pressed)

        #send button
        send_button = Button(self.window, text="Send", font="Raleway", width=20, bg="#C9EDFF",fg="blue",
                             command=lambda: self._on_enter_pressed(None))
        send_button.place(x=849,y=515,width=107,height=60)

    def _get_sname(self):  # ADDED
        self.sname = askstring('Input', "What's your name?")

    def _on_enter_pressed(self, event):
        msg = self.msg_entry.get()
        self._insert_message(msg, self.sname)  # CHANGED

    def _insert_message(self, msg, sender):
        if not msg:
            return

        self.msg_entry.delete(0, END)
        .
        .
        .

Here's a screenshot illustrating its use: screenshot of dialog

  • Related