Не могу выделить стрелки из анимации и сопоставить индексы с расположением пикселей моих стрелок.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Не могу выделить стрелки из анимации и сопоставить индексы с расположением пикселей моих стрелок.

Сообщение Anonymous »

Я беру self.last_peak1, где он блокирует ссылку на пик, а в следующий раз получает self.current_peak1.
Я пытаюсь создать анимацию, которая принимает это значение (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»