Объект с плавающей точкой не может быть интерпретирован как целое число при вызове значения поля ввода tkinter - PullRequest
0 голосов
/ 31 августа 2018

Я строю калькулятор, который принимает различные статистические распределения переменных и умножает их вместе. У меня проблемы с возвратом значений из моих полей ввода для использования в моих расчетах. Все 6 чисел, которые необходимо ввести в калькулятор, являются переменными числами с плавающей запятой.

Я немного сократил и изменил код, чтобы облегчить понимание ошибки.

Мой мыслительный процесс таков.

  1. Я изначально определяю все переменные, которые будут вызываться из поля ввода, используя StringVar () присваивания
  2. Затем я настроил поля ввода для ввода входных переменных, установленных на шаге 1
  3. Я вызываю введенные позиции в функцию расчета, используя variablename.get () и приведите их как переменные типа float
  4. Я использую функцию numpy random.choice для генерации дискретного распределения из предоставленных входов.

На четвертом шаге у меня проблемы. Я получаю ошибку типа, утверждающую, что «объект с плавающей точкой не может быть интерпретирован как целое число». Я не знаю, где Python пытается интерпретировать целое число в этом скрипте. Я думал, что бросил все свои переменные, чтобы плавать.

from tkinter import *
import numpy as np

window = Tk()
window.geometry('1100x700')
window.title('Discrete Gas Calculator')


def example():
    #area variables
    dalv = float(alv.get())
    dabv = float(abv.get())
    dahv = float(ahv.get())
    dalp = float(alp.get())
    dabp = float(abp.get())
    dahp = float(ahp.get())
    dnumbint = float(numbint.get())

    problemex= np.random.choice([dalv,dabv,dahv], dnumbint, p=[dalp,dabp,dahp] )
    print(problemex)


#Number of iterations label
numbitlabel = Label(text = 'Number of Iterations', fg = 'black', bg = 'white', width = 17 ).grid(row = 9, column = 0)
#y labels
arealabel = Label(text = 'Area', fg = 'black', bg = 'white', width = 17 ).grid(row = 1, column = 0)
#x labels
unitslabel = Label(text = 'Units', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 1)
lvlabel = Label(text = 'Low Value', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 2)
bvlabel = Label(text = 'Base Value', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 3)
hvlabel = Label(text = 'High Value', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 4)
lplabel = Label(text = 'Low Probability', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 5)
bplabel = Label(text = 'Base Probability', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 6)
hplabel = Label(text = 'High Probability', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 7)


calcbutton1 = Button(text='Calculate Volumes', width=15, height = 2,fg = 'black', bg = 'white', command = example).place(x = 200, y = 250)

#initially define variables that will be called in entry box
alv = StringVar()
abv = StringVar()
ahv = StringVar()
alp = StringVar()
abp = StringVar()
ahp = StringVar()


#number of iterations variable
numbint = StringVar()


#this section contains the entry box creation for each variable

#area entry boxes
alventry = Entry(textvariable = alv).grid(row = 1, column = 2)
abventry = Entry(textvariable = abv).grid(row = 1, column = 3)
ahventry = Entry(textvariable = ahv).grid(row = 1, column = 4)
alpventry = Entry(textvariable = alp).grid(row = 1, column = 5)
abplventry = Entry(textvariable = abp).grid(row = 1, column = 6)
ahpventry = Entry(textvariable = ahp).grid(row = 1, column = 7)

#number of iterations entry box
numbintentry = Entry(textvariable = numbint).grid(row = 9, column = 1)

window.mainloop()

Пожалуйста, дайте мне знать, если я смогу что-то уточнить, и я сделаю все возможное!

Спасибо, что прочитали это.

1 Ответ

0 голосов
/ 31 августа 2018

Проблема с этой строкой ниже:

problemex= np.random.choice([dalv,dabv,dahv], dnumbint, p=[dalp,dabp,dahp] )

Если вы видите ошибку трассировки и читаете цифровую документацию, эта ошибка совершенно очевидна.

Параметр size в этом случае dumbint должен быть целым числом, но вы передали float. Так что введите его в int и все будет в порядке.

Фактически, замена строкой ниже заставляет программу работать:

problemex= np.random.choice([dalv,dabv,dahv], int(dnumbint), p=[dalp,dabp,dahp] )

...