Я пытаюсь создать анимацию, которая принимает это значение (self.last_peak1) и добавьте ограничения +1 и -1.
Когда, например, я получаю значение дохода, например 0,5 (self.last_peak1 = 0, поэтому диапазон будет 1 и -1) мои стрелки будут двигаться вперед, если они меньше. Мои стрелки будут перемещаться назад и никогда не выходят за пределы макета (у меня проблемы с переполнением, потому что я постоянно получаю стрелку.pos() )
Мне нужно как-то отобразить те значения, которые соответствуют моей текущей ширине в пикселях (слева и справа) - высоте (для стрелок сверху вниз) (150 пикселей для их макетов)
По какой-то причине QPoint позволил мне использовать только 40 значений-пикселей а не 150, если он получает 150, он переполняется.
Это дает мне такой диапазон:
Код: Выделить всё
PyQt6.QtCore.QPoint(9, 50)
PyQt6.QtCore.QPoint(9, 50)
PyQt6.QtCore.QPoint(50, 9)
PyQt6.QtCore.QPoint(50, 9)
Код: Выделить всё
def dl(last_peak1,current_peak1):
self.current_peak1 = current_peak1
self.last_peak1 = last_peak1
self.last_peak1_max = self.closest_wavelength(self.last_peak1 + 1,self.calibrator.calibratedWavelength())
self.last_peak1_min = self.closest_wavelength(self.last_peak1 - 1,self.calibrator.calibratedWavelength())
print(f"Last Peak 1 :{self.last_peak1}")
print(f"Last Peak 1 Min :{self.last_peak1_min}")
print(f"Last Peak 1 Max :{self.last_peak1_max}")
print(f"Current Peak 1 :{self.current_peak1}")
self.animate_all_arrows()
def animate_all_arrows(self):
arrow_map = {
"top": self.top_arrow,
"bottom": self.bottom_arrow,
"left": self.left_arrow,
"right": self.right_arrow,
}
self.animation_group = QParallelAnimationGroup(self)
for direction, arrow in arrow_map.items():
original_pos = arrow.pos()
# print(original_pos)
value_difference = self.current_peak1 - self.last_peak1
# max_diff = (self.last_peak1_max[0] - self.last_peak1_min[0])
# slide_offset = min(max((value_difference * 100) // max_diff , -40), 40)
slide_offset = min(max((value_difference * 100) , -40), 40)
print(f"Slide : {slide_offset}")
if direction == "top":
target_pos = QPoint(original_pos.x(), original_pos.y() - slide_offset)
elif direction == "bottom":
target_pos = QPoint(original_pos.x(), original_pos.y() + slide_offset)
elif direction == "left":
target_pos = QPoint(original_pos.x() - slide_offset, original_pos.y())
elif direction == "right":
target_pos = QPoint(original_pos.x() + slide_offset, original_pos.y())
target_pos = self.clamp_position_in_bounds(arrow, target_pos)
# arrow.setProperty("last_pos", arrow.pos())
animation = QPropertyAnimation(arrow, b"pos")
animation.setDuration(1000)
animation.setStartValue(arrow.pos())
animation.setEndValue(target_pos)
animation.setEasingCurve(QEasingCurve.Type.InOutQuad)
self.animation_group.addAnimation(animation)
self.animation_group.start()
def closest_wavelength(self, targetWavelength, wavelengthList):
index = min(range(len(wavelengthList)), key = lambda i: abs(wavelengthList[i]-targetWavelength))
value = wavelengthList[index]
return index,value
def clamp_position_in_bounds(self, arrow, pos):
rect = self.rect()
min_x, min_y = 0, 0
max_x = rect.width() - arrow.pixmap().width()
max_y = rect.height() - arrow.pixmap().height()
clamped_x = max(min(pos.x(), max_x), min_x)
clamped_y = max(min(pos.y(), max_y), min_y)
return QPoint(clamped_x, clamped_y)
Подробнее здесь: https://stackoverflow.com/questions/792 ... the-pixels