好像我把字符串翻译成了数字,可能是程序执行的顺序不对。
Traceback (most recent call last):
File "H:\Portable Python-3.10.5 x64\Saves\П\нормальное распределение 1.py", line 61, in <module>
x, y, z, X, Y, mask = makeData()
File "H:\Portable Python-3.10.5 x64\Saves\П\нормальное распределение 1.py", line 14, in makeData
a=int(q.get()) #19
ValueError: invalid literal for int() with base 10: ''
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
import tkinter as tk
win = tk.Tk()
win.title("Нормальное распределение теплового поля")
win.geometry ('600x600+600+300')
win.resizable(False,False)
def makeData():
a=int(q.get()) #19
b=float(w.get()) #20
c=int(e.get()) #200
x0=float(t.get()) #19.3
y0=float(u.get()) #19.6
r=float(i.get()) #.1
x = np.linspace(a, b, c) # создаем массив из 100 чисел float от 19 до 20 с равномернов шагом
y = np.linspace(a, b, c)
xgrid, ygrid = np.meshgrid(x, y)
z = np.random.normal(xgrid, ygrid)
## f = 15
## z = 3 + np.sin((f * (xgrid - 19.75)) ** 2 + (f * (ygrid - 19.75)) ** 2)
r = .1 # радиус маски
X, Y = np.meshgrid(x, y)
mask = (X - x0) ** 2 + (Y - y0) ** 2 < r ** 2
return xgrid, ygrid, z, X, Y, mask
tk.Label(win, text='Введите начало массива a = ').grid(row=0,column=0,stick='w')
tk.Label(win, text='Введите конец массива b = ').grid(row=1,column=0,stick='w')
tk.Label(win, text='Введите количество точек массива: ').grid(row=2,column=0,stick='w')
tk.Label(win, text='Центр маски по x от a = ').grid(row=3,column=0,stick='w')
tk.Label(win, text='Центр маски по y до b = ').grid(row=4,column=0,stick='w')
tk.Label(win, text='Радиус маски r = ').grid(row=5,column=0,stick='w')
q = tk.Entry()
w = tk.Entry()
e = tk.Entry()
t = tk.Entry()
u = tk.Entry()
i = tk.Entry()
q.grid(row=0, column=1)
w.grid(row=1, column=1)
e.grid(row=2, column=1)
t.grid(row=3, column=1)
u.grid(row=4, column=1)
i.grid(row=5, column=1)
tk.Button(win, text='Ввести', command=makeData).grid(row=6,column=1)
x, y, z, X, Y, mask = makeData()
fig = plt.figure(figsize=(10, 10))
axes = plt.axes(projection="3d")
cmap = LinearSegmentedColormap.from_list('red_blue', ['b', 'g', 'y', 'r'], 256)
## axes.plot_surface(x, y, z *(1 + mask * 0.75), color='#11aa55', cmap=cmap)
axes.scatter(x, y, z *(1 + mask * 0.75), c=z *(1 + mask * 0.75), cmap=cmap)
axes.set_xlabel('Ось x')
axes.set_ylabel('Ось y')
axes.set_zlabel('Температура')
plt.show()
win.mainloop()
在输入所需值之前,您开始在代码中绘图。也就是输入程序接收到的是一个空字符串,无法将其引向int,其实在报错中也是这么说的。
让回车键调用绘图函数是正确的,即 将第 61-75 行的代码放入一个单独的函数中,并更改按钮处理函数。
这是代码: