Я пытаюсь перетащить метку, где метка должна быть КОПИЕЙ оригинальной метки. Я пытаюсь сделать это с помощью «drag.exec_ (QtCore.Qt.CopyAction)», но, похоже, это неверный путь.
Код
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import os
from PyQt5.QtGui import *
class Label(QLabel):
def __init__(self, title, parent):
super(Label, self).__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != Qt.RightButton:
return
drag = QDrag(self)
mimedata = QMimeData()
mimedata.setText(self.text())
if mimedata.hasText():
print("hattext")
else:
print("hasnotext")
drag.setMimeData(mimedata)
drag.exec_(QtCore.Qt.CopyAction) # NO difference to Qt.MoveAction
class MyTable(QTableWidget):
def __init__(self, rows, columns, parent):
super(MyTable, self).__init__(rows, columns, parent)
self.setAcceptDrops(True)
def dragMoveEvent(self, e):
e.accept()
def dragEnterEvent(self, e):
e.accept()
def dropEvent(self, e):
print('in dropevent')
if e.mimeData().hasText():
indx = self.rowAt(e.pos().y())
indy = self.columnAt(e.pos().x())
print("index",indx, indy)
self.setCellWidget(indx, indy, e.source())
e.setDropAction(QtCore.Qt.CopyAction) #doesn't help anything
e.accept()
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.table = MyTable(4,4,self)
self.table.setAcceptDrops(True)
self.table.setGeometry(100,100,300,300)
self.setWindowTitle('test drag drop COPY')
self.setGeometry(300, 300, 500, 500)
self.myLabel = Label("myLbl",self)
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
В классе Label я использую оператор drag.exec_ (QtCore.Qt.CopyAction). Но это не имеет значения, если CopyAction или MoveAction, то, что я получаю, всегда MOVE! Также в dropEvent класса myTable нет разницы, если я использую CopyAction или MoveAction или полностью пропущу оператор.
Я проверил и протестировал множество примеров из учебных пособий или вопросов здесь в stackoverflow. CopyAction, кажется, работает в НЕТ примере.
Что не так с моим ожиданием, что CopyAction должен создать копию метки? (Не беспокойтесь о тексте метки, обычно я имею дело с jpg)