Я нахожу тот же вопрос с этим названием в вопросе около 11 месяцев назад.Что я пропускаю, так это: Как мне перетащить Qlabel, где я могу скопировать Pixmap И текст метки.
У меня будет несколько QLabel с различными Pixmaps.Перетаскивая каплю, я собираюсь заполнить другой ярлык (моя цель-ярлык).Там я хочу увидеть картинку (Pixmap) и прочитать текст на этикетке, потому что я хочу сделать другое действие, в зависимости от того, из какого QLabels я заполнил свой уровень цели
ответамииз упомянутого вопроса я могу скопировать либо текст, либо Pixmap, но не оба одновременно.
Я пытаюсь объяснить код ниже: в перетаскиваемой метке я вижу свой текст и изображение.В разделе инициализации я печатаю self.text () и получаю правильный текст из звонка.Но в mouseMoveEvent self.text () пусто.Когда я позже установлюText (...), этот текст можно будет оценить в событии drop моей метки цели.Здесь работает ТОЛЬКО копия Pxmap.
Вопрос: Как я могу получить selt.text () В мой mouseMoveEvent?
class DraggableLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setText = args[0]
self.setAcceptDrops(True)
print("my text in init ", self.text())
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.drag_start_position = event.pos()
def mouseMoveEvent(self, event):
print("where is the text?", self.text())
if not (event.buttons() & Qt.LeftButton):
return
if (event.pos() - self.drag_start_position).manhattanLength() < QApplication.startDragDistance():
return
drag = QDrag(self)
mimedata = QMimeData()
mimedata.setText('this text works')
print("text in mimedata",self.text(), " und ",mimedata.text())
mimedata.setImageData(self.pixmap().toImage())
drag.setMimeData(mimedata)
pixmap = QPixmap(self.size())
painter = QPainter(pixmap)
painter.drawPixmap(self.rect(), self.grab())
painter.end()
drag.setPixmap(pixmap)
drag.setHotSpot(event.pos())
drag.exec_(Qt.CopyAction | Qt.MoveAction)
class my_label(QLabel):
def __init__(self,title,parent):
super().__init__(title,parent)
self.setAcceptDrops(True)
pixmap = QPixmap('/home/jf/PycharmProjects/Einzelnoten-1.jpg')
self.setPixmap(pixmap)
def dragEnterEvent(self,event):
if event.mimeData().hasImage():
print("event accepted")
event.accept()
else:
print("event rejected")
event.ignore()
def dropEvent(self,event):
if event.mimeData().hasImage():
text = event.mimeData().text()
self.setPixmap(QPixmap(event.mimeData().imageData()))
print("mimetext",event.mimeData().text())
`
class Widget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
label = my_label("muh",self) #DropLabel("drop there",self)
label.setGeometry(190, 65, 100,100)
label_to_drag = DraggableLabel("mist", self) #image) #"/home/jf/PycharmProjects/Image.png", self) #("Einzelnoten-1.jpg", self)
image=QPixmap("/home/jf/PycharmProjects/Image.png")
label_to_drag.setPixmap((image))
self.show()
PS Извините, но я не понимаю код правильно, этот класс и def находятся на разных уровнях (Работа в Ubuntu 18 с python3,6)