Search code examples
pythonpython-3.xtkintertkinter-entry

Tkinter - How to get integer Entry values?


I tried doing it based on other people's code with the same problem but I couldn't do it.

The problem here is that the code doesn't get the value from the Entry boxes before doing the calculate function.

I posted this version because this one executes the code, while other methods I tried gave error messages.

from tkinter import *
from math import *
root = Tk()

label_1 = Label(root, text="Az osszes elem szama:")
label_2 = Label(root, text="Az A halmaz elemeinek szama:")
label_3 = Label(root, text="A B halmaz elemeinek szama:")
label_4 = Label(root, text="A C halmaz elemeinek szama:")
label_5 = Label(root, text="Az A es B halmaz metszetenek elemeinek szama:")
label_6 = Label(root, text="Az A es C halmaz metszetenek elemeinek szama:")
label_7 = Label(root, text="Az C es B halmaz metszetenek elemeinek szama:")
label_8 = Label(root, text="Az A es B es C halmaz metszetenek elemeinek szama:")

U = Entry(root)
AH = Entry(root)
BH = Entry(root)
CH = Entry(root)
AHmBH = Entry(root)
AHmCH = Entry(root)
CHmBH = Entry(root)
AHmBHmCH = Entry(root)

label_1.grid(row=0, sticky=E)
label_2.grid(row=1, sticky=E)
label_3.grid(row=2, sticky=E)
label_4.grid(row=3, sticky=E)
label_5.grid(row=4, sticky=E)
label_6.grid(row=5, sticky=E)
label_7.grid(row=6, sticky=E)
label_8.grid(row=7, sticky=E)

U.grid(row=0, column=1)
AH.grid(row=1, column=1)
BH.grid(row=2, column=1)
CH.grid(row=3, column=1)
AHmBH.grid(row=4, column=1)
AHmCH.grid(row=5, column=1)
CHmBH.grid(row=6, column=1)
AHmBHmCH.grid(row=7, column=1)

U = IntVar()
AH = IntVar()
BH = IntVar()
CH = IntVar()
AHmBH = IntVar()
AHmCH = IntVar()
CHmBH = IntVar()
AHmBHmCH = IntVar()

E = int(U.get()) - (int(AH.get()) + int(BH.get()) + int(CH.get())) +
    (int(AHmBH.get()) + int(AHmCH.get()) + int(CHmBH.get())) - int(AHmBHmCH.get())

def calculate(event):
    if E < 0:
        print("0-nal nem lehet kisebb")

        if (int(AHmBH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (int(AHmCH.get()) - int(AHmBHmCH.get())) <= int(AH.get()) and (int(AHmCH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (
            int(CHmBH.get()) - int(AHmBHmCH.get())) <= int(CH.get()) and (int(AHmBH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (int(AHmCH.get()) - int(AHmBHmCH.get())) != int(AH.get()) and int(E) >= 0:
            print(int(E))
            print(" db elem nem tartozik A B vagy C halmazokba")
    else:
        print("A megadott adatok nem valosak")

button_1 = Button(root, text="szamitas")
button_1.bind("<Button-1>", calculate)
button_1.grid(row=8, columnspan=2)

root.mainloop()

Solution

  • You are overwriting your Entry widgets.

    remove the following code:

    U = IntVar()
    AH =  IntVar()
    BH =  IntVar()
    CH =  IntVar()
    AHmBH =  IntVar()
    AHmCH =  IntVar()
    CHmBH =  IntVar()
    AHmBHmCH =  IntVar()
    

    And place your E variable within your Calculate function

    The final code should look like this:

    from tkinter import *
    from math import *
    root = Tk()
    
    label_1 = Label(root, text="Az osszes elem szama:")
    label_2 = Label(root, text="Az A halmaz elemeinek szama:")
    label_3 = Label(root, text="A B halmaz elemeinek szama:")
    label_4 = Label(root, text="A C halmaz elemeinek szama:")
    label_5 = Label(root, text="Az A es B halmaz metszetenek elemeinek szama:")
    label_6 = Label(root, text="Az A es C halmaz metszetenek elemeinek szama:")
    label_7 = Label(root, text="Az C es B halmaz metszetenek elemeinek szama:")
    label_8 = Label(root, text="Az A es B es C halmaz metszetenek elemeinek szama:")
    
    U =  Entry(root)
    AH =  Entry(root)
    BH =  Entry(root)
    CH =  Entry(root)
    AHmBH =  Entry(root)
    AHmCH =  Entry(root)
    CHmBH =  Entry(root)
    AHmBHmCH =  Entry(root)
    
    label_1.grid(row=0, sticky=E)
    label_2.grid(row=1, sticky=E)
    label_3.grid(row=2, sticky=E)
    label_4.grid(row=3, sticky=E)
    label_5.grid(row=4, sticky=E)
    label_6.grid(row=5, sticky=E)
    label_7.grid(row=6, sticky=E)
    label_8.grid(row=7, sticky=E)
    
    U.grid(row=0, column=1)
    AH.grid(row=1, column=1)
    BH.grid(row=2, column=1)
    CH.grid(row=3, column=1)
    AHmBH.grid(row=4, column=1)
    AHmCH.grid(row=5, column=1)
    CHmBH.grid(row=6, column=1)
    AHmBHmCH.grid(row=7, column=1)
    
    
    def calculate(event):
        E = int(U.get()) - (int(AH.get()) + int(BH.get()) + int(CH.get())) + (int(AHmBH.get()) + int(AHmCH.get()) + int(CHmBH.get())) - int(AHmBHmCH.get())
        # print E
        if E < 0:
            print("0-nal nem lehet kisebb")
    
        if (int(AHmBH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (int(AHmCH.get()) - int(AHmBHmCH.get())) <= int(AH.get()) and (int(AHmCH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (int(CHmBH.get()) - int(AHmBHmCH.get())) <= int(CH.get()) and (int(AHmBH.get()) - int(AHmBHmCH.get())) + int(AHmBHmCH.get()) + (int(AHmCH.get()) - int(AHmBHmCH.get())) != int(AH.get()) and int(E) >= 0:
            print(int(E))
            print(" db elem nem tartozik A B vagy C halmazokba")
        else:
            print("A megadott adatok nem valosak")
    
    button_1 = Button(root, text="szamitas")
    button_1.bind("<Button-1>", calculate)
    button_1.grid(row=8, columnspan=2)
    
    root.mainloop()
    

    I should add, that you indentation is all over the place. Please, try and either keep it to tabs only, or 4 spaces. Do not mix and match, and please - do not use indents of 1/2/3 spaces.

    And in the future, try to use meaningful variable names. E, U, and etc, are not very meaningful and are really ambiguous. Try to avoid this.