программа вылетает при нажатии в окне интерфейса кнопки расчет

при запуске программа открывает окно интерфейса, задаем вводимые параметры и при нажатии кнопки расчет окно интерфейса вылетает и в терминале vs code выдает ошибку:
AttributeError: 'Ui_MainWindow' object has no attribute 'self'
Программа состоит из двух файлов с кодом, в одном программа во втором интерфейс Вот часть кода отвечающая за это (код программы):

def soplo(): 

    D1 = zD1  # начальный диаметр канала
    R1 = D1 / 2  # радиус внут канала
    D2 = zD2  # начальный диаметр заряда
    R2 = D2 / 2  # радиус внеш канала
    d1 = zd1  # диаметр критики
    r1 = d1 / 2  # радиус критики
    l_kr = r1  # длина критики
    d_konf = float(ui.lineEdit_56.text().replace(',', '.'))
    r_konf = d_konf / 2
    ugol_konf = float(ui.comboBox_5.currentText().replace(',', '.'))
    ugol_diff = float(ui.comboBox_7.currentText().replace(',', '.'))
    d2 = zd2  # диаметр среза сопла
    r2 = d2 / 2  # радиус среза сопла
    delta_r2 = r2 - r1
    delta_r_konf = r_konf - r1
    l_diff = delta_r2 / math.tan(ugol_diff * 0.0175)
    l_konf = delta_r_konf / math.tan(ugol_konf * 0.0175)

    ox1 = d_konf
    oy1 = l_diff + l_kr + l_konf
    d2x = ox1 - (d2 / 2)
    dx = ox1 - (d1 / 2)
    l_diff_y = l_diff + oy1
    l_kr_y = l_diff_y + l_kr
    Dx = ox1 - (d_konf / 2)
    l_konf_y = l_kr_y + l_konf

    ox2 = d_konf + (d_konf / 2)
    oy2 = oy1 * 2
    dxx2 = d_konf + (d1 / 2)
    l_kr2 = l_kr_y - l_kr
    d_a_x = d_konf + (d2 / 2)
    l_kr_seredina = l_diff_y + (l_kr / 2)

    diametr_sreza_sopla = (d_a_x - d2x)
    diametr_kamery_sgor = (ox2 - Dx)
    krit_sech = (dxx2 - dx)
    dlinna = (l_konf_y - oy1)
    dlinna_konf = (l_konf_y - l_kr_y)
    dlinna_kr = (l_kr_y - l_diff_y)
    dlinna_diff = (l_diff_y - oy1)
    verh_l = (l_kr_y + oy1)

    x1 = [ox1, d2x, dx, dx, Dx, ox1, ox2, dxx2, dxx2, d_a_x, ox1]
    y1 = [oy1, oy1, l_diff_y, l_kr_y, l_konf_y, l_konf_y, oy2, l_kr_y, l_kr2, oy1, oy1]
    x9 = [Dx, Dx]
    y9 = [l_konf_y, verh_l]
    x8 = [ox2, ox2]
    y8 = [l_konf_y, verh_l]

    linex = [Dx-0.001, Dx-0.001]
    liney = [oy1, l_konf_y]

    line_diff_x = [ox1, ox1]
    line_diff_y = [l_diff_y, oy1]

    line_konf_x =[ox1, ox1]
    line_konf_y = [l_kr_y, l_konf_y]

    line_kr_x = [dx, dxx2]
    line_kr_y = [l_kr_seredina, l_kr_seredina]

    line_ugolx1 = [dx, dx]
    line_ugoly1 = [l_konf_y - (l_konf/4), oy1 + (l_diff/4)]

    line_diffuzorx = [d2x,d_a_x]
    line_diffuzory = [oy1-0.001, oy1-0.001]

    line_konfuzorx = [Dx, ox2]
    line_konfuzory = [l_konf_y+0.001, l_konf_y+0.001]

    plt.figure(figsize=(7, 9))
    plt.plot(x1, y1)
    plt.plot(x8, y8, x9, y9, color='k')

    plt.plot(linex, liney, linestyle='--', color='k')
    plt.plot(line_diff_x, line_diff_y, linestyle='--', color='k')
    plt.plot(line_konf_x, line_konf_y, linestyle='--', color='k')
    plt.plot(line_kr_x, line_kr_y, linestyle='--', color='r')
    plt.plot(line_ugolx1, line_ugoly1, linestyle='--', color='g')
    plt.plot(line_diffuzorx, line_diffuzory, linestyle='--', color='k')
    plt.plot(line_konfuzorx, line_konfuzory, linestyle='--', color='k')

    plt.text(ox1-0.002, oy1-0.0025, round(diametr_sreza_sopla, 4), rotation='horizontal', color='r', fontsize = 9)
    plt.text(ox1-0.002, l_konf_y+0.0015, round(diametr_kamery_sgor, 4), rotation='horizontal', color='r', fontsize = 9)
    plt.text(ox1-0.002, l_diff_y+0.001, round(krit_sech, 4), rotation='horizontal', color='r', fontsize = 9)
    plt.text(dxx2+0.001, l_kr_seredina-0.001, round(dlinna_kr, 4), rotation='vertical', color='r', fontsize = 9)
    plt.text(Dx, l_diff_y + 0.001, round(dlinna, 4), rotation='vertical', color='r', fontsize = 9)
    plt.text(ox1+0.001, l_diff_y-(dlinna_diff/2), round(dlinna_diff, 4), rotation='vertical', color='r', fontsize = 9)
    plt.text(ox1+0.001, l_konf_y-(dlinna_konf/2), round(dlinna_konf, 4), rotation='vertical', color='r', fontsize = 9)
    plt.text(dx-0.002, l_konf_y - (l_konf/2), round(ugol_konf, 4), rotation='vertical', color='g', fontsize = 9)
    plt.text(dx-0.002, l_diff_y - (l_diff/2), round(ugol_diff, 4), rotation='vertical', color='g', fontsize = 9)
    plt.text(ox1-0.005, oy1-0.007, '- - - - градусы', rotation='horizontal', color='g')
    plt.text(ox1 - 0.005, oy1 - 0.010, '- - - - метры', rotation='horizontal', color='r')
    plt.text(ox1 - 0.005, oy1 - 0.013, '- - - - метры', rotation='horizontal', color='k')
    plt.axis('off')
    plt.show()

def soploRas():

    d1 = float(ui.lineEdit_51.text().replace(',', '.'))  # диаметр критики
    p = float(ui.lineEdit_5.text().replace(',', '.'))   #плотность
    if p == 0 or d1 == 0:
        messagebox.showinfo("Важно!","Перед началом работы, убедитесь что расчёты в Блоке 1 были получены!")
        return
    else:
        es = 0

    d2 = zd2  # диаметр среза сопла
    r2 = d2 / 2  # радиус среза сопла
    r1 = d1 / 2  # радиус критики
    l_kr = r1  # длина критики
    F_kr = math.pi * (d1 ** 2) / 4
    F_a = math.pi * (r2 ** 2)
    nc = F_a / F_kr
    ugol_konf = float(ui.comboBox_5.currentText())
    ugol_diff = float(ui.comboBox_7.currentText())
    delta_r2 = r2 - r1
    d_konf = float(ui.lineEdit_56.text())

    if d_konf <= 0 or ugol_konf <= 0 or ugol_diff <= 0 or d1 <= 0:
        messagebox.showerror("Ошибка", "Вводимые значения не могут быть отрицательными!")
        return (soploRas)
    else:
        cs = 0
    if d_konf <= d1:
        messagebox.showerror("Ошибка", "Диаметр конфузора не может быть равен или превышать значение диаметра критического сечения!")
        return
    if d_konf > zD2:
        messagebox.showerror("Ошибка", "Диаметр конфузора не может превышать значение диаметра заряда!")
        return
    r_konf = d_konf / 2
    delta_r_konf = r_konf - r1
    l_diff = delta_r2 / math.tan(ugol_diff * 0.0175)
    l_konf = delta_r_konf / math.tan(ugol_konf * 0.0175)
    oy1 = l_diff + l_kr + l_konf
    ui.label_34.setText(str(round(nc, 3)))
    ui.label_26.setText(str(round(l_kr, 3)))
    ui.label_27.setText(str(round(l_konf, 3)))
    ui.label_28.setText(str(round(l_diff, 3)))
    ui.label_29.setText(str(round(oy1, 3)))
    ui.label_33.setText(str(round(d2, 3)))

Ответы (0 шт):