программа вылетает при нажатии в окне интерфейса кнопки расчет
при запуске программа открывает окно интерфейса, задаем вводимые параметры и при нажатии кнопки расчет окно интерфейса вылетает и в терминале 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)))