Чтобы сделать ползунки, я извлекаю их из другого класса, который я создал, используя имя, низкое значение, высокое значение и размер шага для ползунка, но проблема в том, что я не могу извлечь значение из ползунков,Я получаю ошибку атрибута, поэтому мне любопытно, есть ли способ обойти это.Возможно, сохранение окончательного положения ползунка после того, как он перестал двигаться или что-то подобное?Любая помощь будет оценена.Ниже приведен код и класс, из которого я берусь.
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from slider import SliderDisplay
class SpringMassDamper(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle('Spring Mass Damper Simulation')
# Main Widget
widget = QWidget()
self.setCentralWidget(widget)
# Layout
layout = QVBoxLayout()
widget.setLayout(layout)
# Quit button
quit_button = QPushButton('Quit')
quit_button.clicked.connect(app.exit)
# Simulate System Button
simulate_button = QPushButton('Simulate System')
simulate_button.clicked.connect(self.print_values)
# Labels
self.title_1 = QLabel('System Parameters')
self.title_1.setAlignment(Qt.AlignLeft)
self.title_2 = QLabel('Simulation Parameters')
self.title_2.setAlignment(Qt.AlignLeft)
# Slider
self.mass_slider = SliderDisplay('Mass:', 0, 10, step=1000)
self.spring_slider = SliderDisplay('Spring:', 0, 10, step=1000)
self.damper_slider = SliderDisplay('Damper:', 0, 10, step=1000)
self.time_slider = SliderDisplay('Time(s):', 0, 100, step=1000)
self.timestep_slider = SliderDisplay('Time Step(s)', 0, 10, step=1000)
# Layout
layout.addWidget(self.title_1)
layout.addWidget(self.mass_slider)
layout.addWidget(self.spring_slider)
layout.addWidget(self.damper_slider)
layout.addWidget(self.title_2)
layout.addWidget(self.time_slider)
layout.addWidget(self.timestep_slider)
layout.addWidget(simulate_button)
layout.addWidget(quit_button)
def print_values(self):
x = self.mass_slider.value()
print(x)
#print('Mass:', float(self.mass_slider.value()))
if __name__ == '__main__':
app = QApplication([])
interface = SpringMassDamper()
interface.show()
app.exec_()
class SliderDisplay(QMainWindow):
def __init__(self, name, low, high, step=1000):
QMainWindow.__init__(self)
self.setWindowTitle('Slider Display')
# Main Widget
widget = QWidget()
self.setCentralWidget(widget)
# Layout
layout = QHBoxLayout()
widget.setLayout(layout)
# Labels
self.name = QLabel(str(name))
self.label = QLabel(str(low))
# Slider
self.slider = QSlider(Qt.Horizontal, self)
self.slider.setMinimum(low)
self.slider.setMaximum(high*step)
self.slider.setValue(low)
self.slider.valueChanged.connect(self.change_value)
# Layout
layout.addWidget(self.name)
layout.addWidget(self.label)
layout.addWidget(self.slider)
# Function for changing value of label to the slider and accounting for step
def change_value(self):
num = (float(self.slider.value())) / 1000
self.label.setText(str(num))