-1

So i am trying to get an text input for my program but tkinter doesn't seem to register it, and i don't know what i have done wrong

    window = self.newWindow(value)

    label = tk.Label(window, text="Intfix to Postfix Convert")
    label.place(x=0, y=20)

    e1 = tk.Entry(window)
    text = e1.get()
    e1.place(x=0, y=50)

    rezultat = tk.Text(window, width=20, height=3)
    rezultat.place(x=0, y=80)

    button = tk.Button(window, text="Enter")
    button.place(x=127, y=46)
    button.bind("<Double-Button-1>", self.passValue(rezultat, text))

My code looks something like this. Everything else is working the self.newWindow(value) is just a function that creates a new window from the main one

so i said text=e1.get() but i ran the debbuger and it says it is an empty string and i want to pass this text through the function passValue()(a function that passes the value to the controller), i used button.bind() to do that. Is that ok?

I tested it by putting a default value at text like text="My name" and it did pass the value so that should be in order but i don't know why doesn't it get it from the entry box like it should.

I even tried to do e1.insert(0,"some random thing") and text= e1.get() and it did get it so i think there's a problem with the input.

Do i need to use some special kind of input function?

The whole code:

class Gui:

    def __init__(self, controller):
        self.main = tk.Tk()
        self.main.title("DSA Quiz Helper")
        self.__controller = controller

    def IntFixPostExecute(self, event):
        widget = event.widget
        selection = widget.curselection()
        value = widget.get(selection[0])
        self.IntfixPostfixWindow(value)

    def mainWindow(self):
        self.main.geometry("800x500")

        # to do scrollbar
        lb = tk.Listbox(self.main, width=50, height=30)
        lb.insert(1, "Intfix and Postfix Calculator")
        lb.insert(2, "Something else")
        lb.bind("<Double-Button-1>", self.IntFixPostExecute)
        lb.pack()

    def IntfixPostfixWindow(self, value):
        window = self.newWindow(value)

        label = tk.Label(window, text="Intfix to Postfix Convert")
        label.place(x=0, y=20)

        e1 = tk.Entry(window)
        text = e1.get()
        e1.place(x=0, y=50)

        rezultat = tk.Text(window, width=20, height=3)
        rezultat.place(x=0, y=80)

        button = tk.Button(window, text="Enter")
        button.place(x=127, y=46)
        button.bind("<Double-Button-1>", self.passValue(rezultat, text))
        print(text)

    def passValue(self, rezultat, value):
        returnValue = self.__controller.InfixToPostC(rezultat, value)
        rezultat.insert(tk.INSERT, returnValue)

    def newWindow(self, msg):
        newwind = tk.Toplevel(self.main)
        q1 = tk.Frame(newwind)
        q1.pack()
        newwind.geometry("500x230")
        return newwind

    def run(self):
        self.mainWindow()
        self.main.mainloop()

if i set this manually it works. I don't understand why i doesn't work from entrybox input

    text = tk.StringVar()
    e1 = tk.Entry(window, textvariable=text)
    text.set("x+y*2")
    text = e1.get()
    e1.place(x=0, y=50)

I think i figured it out (correct me if i am wrong). I think there is a problem with the button because as soon as a newwindow is open, the button automatically clicks itself, when at first in the entry box there is no text written yet(so it sends to the controller with the initial text(which is empty)). The problem is why the button auto-clicks itself( or anyway auto-runs the function passValue) and why after i input the text and click the button again it does nothing(so as i understand it works only one time and auto-runs itself, at first there is no text in entrybox and the button auto-runs itself,therefore passing an empty string

1 Answers1

1

You should use entryname.get() to get the text that is inside that entry instead of declaring stringVar() and making that much more unreadable and hard to comprehend and to work with. But this is my point of view! – Tiago Oliveira 48 mins ago
I think what is happening is that u use the method right after declaring the entry widget wich means u are going to get a "" empty string because that's nothing that was written there, u need to replace on the command parameter with entryname.get() instead of declaring variable = entryname.get() and passing that as parameter wich will always be empty! Hope this helps!

Tiago Oliveira
  • 47
  • 1
  • 12