import sys
from PySide import QtCore, QtGui
class WidgetItem(QtGui.QLabel):
def __init__(self, color):
super().__init__('')
self._color = color
self.setStyleSheet('border: 1px solid black;')
self.setFixedSize(32, 32)
self.setAcceptDrops(True)
def paintEvent(self, event):
self.changeColor()
super().paintEvent(event)
def changeColor(self):
pal = QtGui.QPalette(self.palette())
pal.setColor(QtGui.QPalette.Window, QtGui.QColor(self._color))
self.setAutoFillBackground(True)
self.setPalette(pal)
def mousePressEvent(self, event):
drag = QtGui.QDrag(self)
mime = QtCore.QMimeData()
mime.setText(self._color)
drag.setMimeData(mime)
drag.exec_()
def dragEnterEvent(self, event):
event.accept()
def dragMoveEvent(self, event):
event.accept()
def dropEvent(self, event):
if event.mimeData().hasText():
self._color = event.mimeData().text()
self.changeColor()
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setFixedSize(640, 240)
widget.setLayout(QtGui.QHBoxLayout())
layout = widget.layout()
layout.addWidget(WidgetItem('red'))
layout.addWidget(WidgetItem('blue'))
layout.addWidget(WidgetItem('green'))
layout.addWidget(WidgetItem('white'))
widget.show()
sys.exit(app.exec_())