Индикатор перетаскивания PyQt6 QTreeView не отображается после переопределения событий перетаскиванияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Индикатор перетаскивания PyQt6 QTreeView не отображается после переопределения событий перетаскивания

Сообщение Anonymous »

Я пытаюсь реализовать функцию перетаскивания в виджете QTreeView в PyQt6. Я включил поддержку перетаскивания с помощью setDragEnabled(True), setAcceptDrops(True) и setDropIndicatorShown(True), чтобы отображать индикатор перетаскивания при перетаскивании элементов.
Однако после переопределения встроенных функций перетаскивания событий (dragEnterEvent, dragMoveEvent и dropEvent), индикатор перетаскивания (линия между строками, куда можно перетащить перетаскиваемый элемент) больше не отображается.
Как я могу восстановить или правильно отобразить индикатор перетаскивания между элементами после переопределения функций событий перетаскивания в QTreeView PyQt6?
Вот код, который у меня есть на данный момент:
from PyQt6 import QtCore, QtGui, QtWidgets

class ObjectTree(QtWidgets.QTreeView):
def __init__(self):
super().__init__()

self.model = QtGui.QStandardItemModel()
self.setModel(self.model)

# Enable drag and drop
self.setDragEnabled(True)
self.setAcceptDrops(True)
self.setDropIndicatorShown(True) # Show drop indicator

self._populate_tree()

def _populate_tree(self):
root_item = QtGui.QStandardItem('Root')
self.model.appendRow(root_item)
for i in range(10):
child_item = QtGui.QStandardItem(f'Child {i + 1}')
root_item.appendRow(child_item)

def dragEnterEvent(self, event):
if event.mimeData().hasFormat('application/x-item'):
event.acceptProposedAction()
else:
event.ignore()

def dragMoveEvent(self, event):
if event.mimeData().hasFormat('application/x-item'):
event.acceptProposedAction()
else:
event.ignore()

def dropEvent(self, event):
if event.mimeData().hasFormat('application/x-item'):
data = event.mimeData().data('application/x-item')
stream = QtCore.QDataStream(data, QtCore.QIODevice.OpenModeFlag.ReadOnly)
item_name = stream.readQString()
print(f"Dropped item: {item_name}")
event.acceptProposedAction()

def startDrag(self, event):
selected_indexes = self.selectedIndexes()
if selected_indexes:
selected_item = self.model.itemFromIndex(selected_indexes[0])
mime_data = QtCore.QMimeData()
data = QtCore.QByteArray()
stream = QtCore.QDataStream(data, QtCore.QDataStream.OpenModeFlag.WriteOnly)
stream.writeQString(selected_item.text())
mime_data.setData('application/x-item', data)

drag = QtGui.QDrag(self)
drag.setMimeData(mime_data)
drag.exec(event)

class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()

self.object_tree = ObjectTree()
self.setCentralWidget(self.object_tree)

self.setWindowTitle("PyQt6 Drag and Drop Example")
self.setGeometry(100, 100, 600, 400)

if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec()


Подробнее здесь: https://stackoverflow.com/questions/793 ... rag-events
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как отключить эффект наведения для стрелок в PYQT6 QTreeView?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как отключить эффект наведения для стрелок в PYQT6 QTreeView?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Жест перетаскивания Android: можно ли иметь события в начале перетаскивания во время перетаскивания?
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Ошибка PyQt6 в Python 3.13.0 – ModuleNotFoundError: нет модуля с именем PyQt6.sip
    Anonymous » » в форуме Python
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • Ошибка PyQt6 в Python 3.13.0 – ModuleNotFoundError: нет модуля с именем PyQt6.sip
    Anonymous » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous

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