Добрый день!
Пишу очень простую прогу для расчёта ветра.
Импортировал код из QT Designer'а в основной файл питона, решил добавить пару строк для события нажатия кнопок, однако все варианты, которые я находил в интернете не работают. Проблема реализовать это внутри класса, так как за пределами интерпретатор не узнаёт переменные кнопок.
Версия питона - 3.9
Пишу очень простую прогу для расчёта ветра.
Импортировал код из QT Designer'а в основной файл питона, решил добавить пару строк для события нажатия кнопок, однако все варианты, которые я находил в интернете не работают. Проблема реализовать это внутри класса, так как за пределами интерпретатор не узнаёт переменные кнопок.
Версия питона - 3.9
Python:
from PyQt5 import QtWidgets, uic, QtCore, QtGui
import math
import sys
# Main window
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(310, 350)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(310, 350))
MainWindow.setMaximumSize(QtCore.QSize(310, 350))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
MainWindow.setFont(font)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(45, 20, 231, 61))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(25)
self.label.setFont(font)
self.label.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label.setFrameShadow(QtWidgets.QFrame.Plain)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(20, 100, 111, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.label_2.setFont(font)
self.label_2.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_2.setAlignment(QtCore.Qt.AlignCenter)
self.label_2.setWordWrap(True)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(20, 150, 111, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.label_3.setFont(font)
self.label_3.setAlignment(QtCore.Qt.AlignCenter)
self.label_3.setWordWrap(True)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(20, 200, 111, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.label_4.setFont(font)
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
self.label_4.setWordWrap(True)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(20, 250, 111, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.label_5.setFont(font)
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
self.label_5.setWordWrap(True)
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(20, 300, 111, 41))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.label_6.setFont(font)
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
self.label_6.setWordWrap(True)
self.label_6.setObjectName("label_6")
self.port_btn = QtWidgets.QPushButton(self.centralwidget)
self.port_btn.setGeometry(QtCore.QRect(140, 310, 71, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.port_btn.setFont(font)
self.port_btn.setCheckable(False)
self.port_btn.setObjectName("port_btn")
self.port_btn.setStyleSheet('background: rgb(255,140,105);')
# Beginning of variants
self.port_btn.clicked.connect(self.port_btn_clicked)
#self.port_btn.clicked(self.connect.port_btn_clicked)
#self.port_btn(self.port_btn.clicked(port_btn_clicked()))
#self.port_btn.clicked(self, port_btn_clicked())
# End of variants
self.stbd_btn = QtWidgets.QPushButton(self.centralwidget)
self.stbd_btn.setGeometry(QtCore.QRect(220, 310, 80, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.stbd_btn.setFont(font)
self.stbd_btn.setObjectName("stbd_btn")
self.stbd_btn.setStyleSheet('background: rgb(192,255,142);')
#s_btn = QtWidgets.QPushButton("stbd_btn", self)
self.stbd_btn.clicked.connect(self.buttonClicked)
self.line_1 = QtWidgets.QLineEdit(self.centralwidget)
self.line_1.setGeometry(QtCore.QRect(170, 110, 91, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.line_1.setFont(font)
self.line_1.setObjectName("line_1")
self.line_2 = QtWidgets.QLineEdit(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(170, 160, 91, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.line_2.setFont(font)
self.line_2.setObjectName("line_2")
self.line_3 = QtWidgets.QLineEdit(self.centralwidget)
self.line_3.setGeometry(QtCore.QRect(170, 210, 91, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.line_3.setFont(font)
self.line_3.setObjectName("line_3")
self.line_4 = QtWidgets.QLineEdit(self.centralwidget)
self.line_4.setGeometry(QtCore.QRect(170, 260, 91, 21))
font = QtGui.QFont()
font.setFamily("Bahnschrift SemiBold Condensed")
font.setPointSize(10)
self.line_4.setFont(font)
self.line_4.setObjectName("line_4")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Windy?"))
self.label.setText(_translate("MainWindow", "TRUE WIND"))
self.label_2.setText(_translate("MainWindow", "Ship\'s speed (in knots)"))
self.label_3.setText(_translate("MainWindow", "Ship\'s heading"))
self.label_4.setText(_translate("MainWindow", "Relative wind speed (in m/s)"))
self.label_5.setText(_translate("MainWindow", "Relative wind direction"))
self.label_6.setText(_translate("MainWindow", "Relative wind side"))
self.port_btn.setText(_translate("MainWindow", "Port"))
self.stbd_btn.setText(_translate("MainWindow", "Starboard"))
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
# Main calculating code
# Determinative variables
#vspd = Ui_MainWindow.line1.text
vspd = 12
vdir = 120
rspd_input = 20
rspd_side = "Knots"
if rspd_side == "Knots":
rspd = rspd_input
else: rspd = rspd_input / 1.852
rdir = 50
aotb = "Starboard"
# Direction identity
def port_btn_clicked(self):
print('port button clicked!!!!!!!11111111')
print(math.sqrt((vspd ** 2 + rspd ** 2 - 2 * vspd * rspd * math.cos(math.radians(rdir)))))
#tspd = math.sqrt((vspd ** 2 + rspd ** 2 - 2 * vspd * rspd * math.cos(math.radians(rdir))))
print((tspd ** 2 + vspd ** 2 - rspd ** 2) / (2 * tspd * vspd))
#z_form = (tspd ** 2 + vspd ** 2 - rspd ** 2) / (2 * tspd * vspd)
if z_form == 1: # Main angle calculations
z = 0
elif z_form == -1:
z = 180
else: z =math.degrees(math.acos(z_form))
if aotb == "Port": # Determination of siding and translating to 360 mode
if 180 - z + vdir >= 360:
a = 180 - z +vdir - 360
else: a = 180 - z + vdir
else:
if 180 + z + vdir >= 360:
a = 180 + z + vdir - 360
else: a = 180 + z +vdir
def stbd_btn_clicked(self):
print('stbd button clicked!!!!!!!11111111')