Создание простой математической программы с графическим интерфейсом с использованием Tkinter на Python

#python-3.x #tkinter

#python-3.x #tkinter

Вопрос:

Я новичок в python, не могу понять, что не так с этим кодом, Вот ошибка:

 Exception in Tkinter callback
Traceback (most recent call last):

File "C:Userssarvinoz.toshpulotovAppDataLocalProgramsPythonPython37-32libtkinter__init__.py", line 1705, in __call__

    return self.func(*args)

File "C:/Users/sarvinoz.toshpulotov/Desktop/PROJECT2/Project.py", line 34, in getter

     a[int(coef1.get())] = int(pow1.get())
ValueError: invalid literal for int() with base 10: ''
  

и вот часть моего кода:

 from tkinter import *

class Derivat:

    def length():
        l = w
        global numb
        frame1 = Frame(l)
        title = Label(frame1, text = "Enter the length of your expression:", font= ("arial", 14), bg = "skyblue")
        title.grid(row = 0, column = 0, padx = 5, pady = 5)
        numb = Entry(frame1, width = 10)
        numb.grid(row=0, column=2)
        frame1.pack(side=TOP, pady=5, padx=5, ipadx = 5, ipady = 5)
        result = Button(frame1, text="Enter:", bg="green")
        result.grid(row=0, column=3, padx =10, pady =10)
        result.config(command=Derivat.getter)

    def getter():
        m = w
        f = int(numb.get())
        frame2 = Frame(m)
        frame3 = Frame(m)
        a = {}
        coef = Label(frame2, text="Enter your coefficients accordingly:")
        coef.grid(row=0, column=0)
        power = Label(frame3, text="Enter the power's of the x accordingly:")
        power.grid(row=10, column=0)
        for i in range(f):
            coef1 = Entry(frame2)
            coef1.grid(row=20, column=i)
            pow1 = Entry(frame3)
            pow1.grid (row = 30, column = i)
            a[int(coef1.get())] = int(pow1.get())
        frame2.pack(side=LEFT, pady=5, padx=5, ipadx=5, ipady=5)
        frame3.pack(side=LEFT, pady=5, padx=5, ipadx=5, ipady=5)
        print(a)
  

Комментарии:

1. Вы делаете, int(coef1.get()) когда coef1 пусто. Итак, это то же самое, что и выполнение int("") , которое выдает ошибку, которую вы видите. То же самое касается pow1 .

2. Спасибо за ваш ответ. Как я могу решить проблему? Я хочу создать таблицу с двумя строками и n столбцами и составить словарь из этих значений? Заранее спасибо?

3. Вы, кажется, думаете, что использование .get() является динамическим. Когда вы это делаете, val = entry.get() val получает значение записи в данный момент, val не изменяется при изменении содержимого записи. Следовательно, вам следует подождать с вызовом .get() до того момента, когда вы действительно захотите узнать содержимое записи. Это должно происходить при некотором событии, например, при нажатии кнопки.

4. И все же пользователь может нажать эту кнопку перед заполнением любой записи или вводом текста, поэтому вам следует приложить некоторые усилия, чтобы либо заставить запись принимать только целые числа, либо проверить, соответствует ли получаемое содержимое форме, которую вы ожидаете, перед их использованием.