Skip to content Skip to sidebar Skip to footer

How To Make Expressions In Tkinter Python

I'm new in python programming and I'm having some issues in developing a specific part of my GUI with Tkinter. What I'm trying to do is, a space where the user could enter (type) h

Solution 1:

Here is a simple version of what you are trying to do.

We need to use the eval built in function to evaluate the math of a string.

We should also write our code with some error handling as there is a very good change a user will type a formula wrong and the eval statement will fail.

For more information on eval and exec take a look at this post here. I think it does a good job of explaining the two.

Here is what it would look like:

import tkinter as tk

root = tk.Tk()

math_label = tk.Label(root, text = "Type formula and press the Calculate button.")
math_label.pack()
math_entry = tk.Entry(root)
math_entry.pack()
result_label = tk.Label(root, text = "Results: ")
result_label.pack(side = "bottom")

def perform_calc():
    global result_label
    try:
        result = eval(math_entry.get())
        result_label.config(text = "Results: {}".format(result))
    except:
        result_label.config(text = "Bad formula, try again.")


applybutton = tk.Button(root, text = "Calculate", command = perform_calc)
applybutton.pack()

root.mainloop()

Solution 2:

The first answer gets at the right thought, but it can also be matched a little more explicitly to the example you gave, in case you want to take this a little further.

Basically you want to use the eval statement to test your conditional, and then use the exec statement to run your python code blocks. You have to pass in the globals() argument in order to make sure your exec functions modify the correct variables in this case

See below:

import tkinter as tk
from tkinter import messagebox

var = 10out = 0def calculate():
    globalouttry:
        ifeval(IfEntry.get()):
            exec(thenEntry.get(), globals())
        else:
            exec(elseEntry.get(), globals())
        messagebox.showinfo(title="Calculation", message="out: " + str(out))
    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        msg = traceback.format_exception(exc_type, exc_value, exc_traceback)
        messagebox.showinfo("Bad Entry", message=msg)            

root = tk.Tk()

Iflabel = tk.Label(root, text = "If...")
Iflabel.pack()
IfEntry = tk.Entry(root)
IfEntry.insert(0, "var >= 10")
IfEntry.pack()

thenlabel = tk.Label(root, text = "Then...")
thenEntry = tk.Entry(root)
thenlabel.pack()
thenEntry.insert(0, "out = 4")
thenEntry.pack()

elselabel = tk.Label(root, text = "else..")
elseEntry = tk.Entry(root)
elselabel.pack()
elseEntry.insert(0, "out = 2")
elseEntry.pack()

applybutton = tk.Button(root, command=calculate, text = "Calculate")
applybutton.pack()


applybutton.focus_displayof

root.mainloop()

Post a Comment for "How To Make Expressions In Tkinter Python"