调用 tkinter 输入框值时,不能将浮点对象解释为整数
Float object cannot be interpreted as an integer when calling a tkinter entry box value
我正在构建一个计算器,它接受变量的各种统计分布并将它们相乘。我在从我的输入框中返回用于计算的值时遇到问题。需要输入计算器的6个数字都是浮点型变量。
我对代码进行了一些缩写和修改,以便更容易理解错误。
我的思路是这样的
- 我最初定义了所有将从输入框中调用的变量
StringVar() 赋值
- 然后我设置输入框以获取在步骤 1 中设置的输入变量
- 我通过使用
variablename.get() 方法并将它们转换为浮点变量
- 我使用 numpy random.choice 函数生成离散分布
来自提供的输入。
第 4 步是我遇到问题的地方。我收到一个类型错误,指出“'float object' 不能被解释为整数”。我不知道 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()
如果我能澄清任何问题,请告诉我,我会尽力而为!
感谢阅读本文。
问题出在下面这一行:
problemex= np.random.choice([dalv,dabv,dahv], dnumbint, p=[dalp,dabp,dahp] )
如果您看到回溯错误并阅读 numpy 文档,错误就很明显了。
本例中的 size
参数 dumbint
必须是整数,但您传递了一个 float
。
所以将它转换为 int
,你应该没问题。
事实上,替换为下面的行会使程序运行:
problemex= np.random.choice([dalv,dabv,dahv], int(dnumbint), p=[dalp,dabp,dahp] )
我正在构建一个计算器,它接受变量的各种统计分布并将它们相乘。我在从我的输入框中返回用于计算的值时遇到问题。需要输入计算器的6个数字都是浮点型变量。
我对代码进行了一些缩写和修改,以便更容易理解错误。
我的思路是这样的
- 我最初定义了所有将从输入框中调用的变量 StringVar() 赋值
- 然后我设置输入框以获取在步骤 1 中设置的输入变量
- 我通过使用 variablename.get() 方法并将它们转换为浮点变量
- 我使用 numpy random.choice 函数生成离散分布 来自提供的输入。
第 4 步是我遇到问题的地方。我收到一个类型错误,指出“'float object' 不能被解释为整数”。我不知道 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()
如果我能澄清任何问题,请告诉我,我会尽力而为!
感谢阅读本文。
问题出在下面这一行:
problemex= np.random.choice([dalv,dabv,dahv], dnumbint, p=[dalp,dabp,dahp] )
如果您看到回溯错误并阅读 numpy 文档,错误就很明显了。
本例中的 size
参数 dumbint
必须是整数,但您传递了一个 float
。
所以将它转换为 int
,你应该没问题。
事实上,替换为下面的行会使程序运行:
problemex= np.random.choice([dalv,dabv,dahv], int(dnumbint), p=[dalp,dabp,dahp] )