Проблема с движением и поведением индикатора-призрака при перетаскивании элементов в PySide6.Python

Программы на Python
Ответить
Anonymous
 Проблема с движением и поведением индикатора-призрака при перетаскивании элементов в PySide6.

Сообщение Anonymous »

Я работаю над приложением на PySide 6, в котором реализована функция перетаскивания элементов для изменения их порядка. В программе пользователь может создавать элементы (такие как TextElement, HeaderElement, ImageElement), состоящие из заголовка и базовой структуры. Эти элементы можно перетаскивать и переставлять в списке.
В программе используется призрачный индикатор, который визуализирует место, куда элемент будет перемещаться при перетаскивании. Размер индикатора изменяется в соответствии с размером перетаскиваемого элемента, что позволяет пользователю видеть, куда будет вставлен элемент.
Элементы в программе имеют разные размеры, которые зависят от их содержимого. . Например, элемент с изображением может быть больше по высоте, чем элемент с текстом. Проблема возникает при перетаскивании элемента через другие элементы разного размера.
Когда я перетаскиваю элемент и перемещаю мышь мимо элементов большего или меньшего размера, индикатор-призрак начинает «прыгать». ", не понимая, где именно его нужно отобразить. Иногда призрак не держится в правильном положении или смещается в сторону. Более того, при отпускании элемента он не всегда оказывается там, где отображался призрак, что вызывает проблемы с правильным размещением.


![Видно, что при перемещении элемента-призрака курсором мыши призрак колеблется и меняет свое положение , пытаясь определить правильное место для вставки между другими элементами.]
Вот часть кода из моего класса DragWidget, который отвечает за определение местоположения призрака , это работало правильно, пока элементы были одинакового размера:
def _find_drop_location(self, e):
pos = e.position() # Get the cursor position
spacing = self.blayout.spacing() / 2 # Half of the spacing between items

for n in range(self.blayout.count()):
w = self.blayout.itemAt(n).widget() # Get each item

# Check for vertical orientation:
drop_here = (
pos.y() >= w.y() - spacing
and pos.y() = w.y() - spacing
and pos.y()

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-dragging
Ответить

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

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

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

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

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