Создайте полупрозрачный холст для удаления файлов [PyQT] - PullRequest
2 голосов
/ 08 марта 2019

Базовый

Как я хочу создать

Привет

У меня есть простое приложение PyQT5. Главное окно - это QMainWindow, в котором находится QWidget. Макет QWidget выглядит следующим образом:

Класс Canvas (QWidget):

def __init__(self):
    super().__init__()
    self.ListOfPlots = []
    self.outFile = "temp.prb"
    self.initUI()


def initUI(self):

    self.headLabel = QLabel("List of Plots:")
    self.label = QLabel("",self)

    self.setAcceptDrops(True)

    self.createPushButtons()


    hbox = QHBoxLayout()                #Horizontal Layout
    #hbox.addStretch(1)
    hbox.addWidget(self.combineButton)
    hbox.addWidget(self.openButton)
    hbox.addWidget(self.resetButton)

    self.vbox = QVBoxLayout()
    self.vbox.addWidget(self.headLabel)
    self.vbox.addWidget(self.label)

    self.vbox.addLayout(hbox)                ## The horizontal box is placed into vertical layout

    self.setLayout(self.vbox)

Я хочу создать полупрозрачную область перетаскивания, как показано на втором рисунке, с меткой, обозначающей здесь файлы перетаскивания. Какой самый подходящий способ сделать это?

Весь виджет в порядке, чтобы разрешить падение. Я просто хочу поле, указывающее, что здесь можно добавить (например, индикатор).

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете использовать динамические свойства, чтобы вызвать индикатор, когда все в порядке.Если вам нужно, чтобы фон был полупрозрачным, используйте rgba для свойства фона таблицы стилей вашего виджета.background:rgba(255,255,255,90)

from PySide2 import QtWidgets
import sys
from PySide2.QtWidgets import  QWidget, QGridLayout, QFrame


class DropZone(QFrame):
    def __init__(self, parent=None):
        QFrame.__init__(self)
        self.setFixedSize(200, 200)
        self.setAcceptDrops(True)
        self.setObjectName('DropZone')
        self.setStyleSheet(
            'QFrame#DropZone[Dropindicator=true]{border:3px solid green;background:darkorange;}\nQFrame#DropZone{background:orange;}')

    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat('text/plain'):
            self.setProperty('Dropindicator',True)
            print(event.mimeData().text())
            self.setStyle(self.style())
            ...
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        event.accept()
        if event.isAccepted():
            self.setProperty('Dropindicator',False)
        self.setStyle(self.style())


class Widget( QWidget):
    def __init__(self,parent=None):
        QWidget.__init__(self)
        gl = QGridLayout()
        self.setLayout(gl)
        self.dz = DropZone()
        self.dz.setParent(self)
        gl.addWidget(self.dz)
        self.setLayout(gl)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
...