Перетащите изображение на метку, чтобы разместить или нарисовать другую метку pyqt5Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Перетащите изображение на метку, чтобы разместить или нарисовать другую метку pyqt5

Сообщение Anonymous »

Я хочу сделать это на PyQt5. Я поместил изображение внутри области метки с помощью Pixmap, и на метке-2 также есть изображение. Вот что я хочу сделать: я хочу перетащить изображение на метку (сохраняя оригинал на месте, т. е. клонировать его) и клонировать его на изображение на метке-2 в указанной мной позиции. При этом я хочу разместить его на другом виджете, перетащив его. Я написал алгоритм операции перетаскивания, но не могу его нарисовать на этикетке. Как мне этого добиться?
Изображение

Это мой код:
import sys

from PyQt5.QtCore import QRect
from PyQt5.QtGui import QPixmap, QPainter, QPen, QColor
from PyQt5.QtWidgets import *
from test import Ui_MainWindow
from PyQt5.QtCore import Qt, QRect, QPoint

class MainWindow(QMainWindow):
def __init__(self,parent = None):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

self.boxes = [] # Klonlanmış box'ların listesi

self.original_box = QPixmap("box.png").scaled(100, 150) # Orjinal box resmi
self.original_palette = QPixmap("palette.png")
# print( self.img.width(),self.img.height())
self.ui.image.setPixmap(self.original_box)
self.ui.palet.setPixmap(self.original_palette)

self.dragging = False # Sürükleme durumu
self.offset = None # Sürükleme konumu
self.ui.image.setFixedSize(self.original_box.width(), self.original_box.height())
self.ui.palet.setFixedSize(self.original_palette.width(), self.original_palette.height())
# self.ui.image.setScaledContents(True)
self.ui.image.setContentsMargins(0, 0, 0, 0)
self.ui.image.setStyleSheet("QLabel { padding: 0px; }")

self.ui.palet.setContentsMargins(0, 0, 0, 0)
self.ui.palet.setStyleSheet("QLabel { padding: 0px; }")
print("After")
self.ui.widget_2.setAcceptDrops(True) # Bırakma işlemini kabul et

self.rectangle = QRect(500,400,self.original_box.width(), self.original_box.height())

def paintEvent(self, event):
painter = QPainter()
pen = QPen(QColor(0, 0, 0), 10)
painter.setPen(pen)
painter.drawRect(self.rectangle)
painter.drawEllipse(285, 45, 30, 50)
# self.update()

# Orjinal box'ı çiz
# painter.drawPixmap(100, 150, self.original_box)

# print("draw",self.dragging)

# Sürüklenen box'ı çiz
if self.dragging:
# print(self.dragging)

painter.drawPixmap(self.offset.x() - self.original_box.width() / 2,
self.offset.y() - self.original_box.height() / 2,
self.original_box)
# self.ui.image.setPixmap(self.original_box)

# Klonlanmış box'ları çiz
for box in self.boxes:
painter.drawPixmap(box.topLeft(), self.original_box)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
# print("MAUSE GLOBAL POS",self.ui.image.mapFromGlobal(event.globalPos()))
# print(self.ui.image.rect().contains(self.ui.image.mapFromGlobal(event.globalPos())))
print(self.ui.widget_2.rect())
if(self.ui.image.rect().contains(self.ui.image.mapFromGlobal(event.globalPos()))):
self.dragging = True
self.offset = event.pos()
print("Offset point", self.offset)

def mouseMoveEvent(self, event):
if self.dragging:
# print("DRAGGING")
# Sürüklenen box'ın merkezini güncelle
self.offset = event.pos()
self.update()

def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton and self.dragging:
print("RELEASE")
self.dragging = False
# Yeni box'ı oluştur
new_box = QRect(self.offset.x() - self.original_box.width() / 2,
self.offset.y() - self.original_box.height() / 2,
self.original_box.width(), self.original_box.height())
self.boxes.append(new_box)
self.update()

if __name__ == "__main__":

app = QApplication(sys.argv)

window = MainWindow()
window.show()

sys.exit(app.exec_())


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Перетащите строку таблицы из одной таблицы вкладок в другую таблицу вкладок – Jquery
    Гость » » в форуме Jquery
    0 Ответы
    161 Просмотры
    Последнее сообщение Гость
  • Перетащите строку таблицы из одной таблицы вкладок в другую таблицу вкладок.
    Anonymous » » в форуме Jquery
    0 Ответы
    88 Просмотры
    Последнее сообщение Anonymous
  • Перетащите файл на метку
    Anonymous » » в форуме Jquery
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Перетащите файл на метку
    Anonymous » » в форуме Jquery
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Ошибка при установке pyqt5 (pip install pyqt5)
    Anonymous » » в форуме Python
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous

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