python - 创建用于放置文件的半透明画布 [PyQT]
问题描述
你好
我有一个简单的 PyQT5 应用程序。主窗口是一个 QMainWindow,其中包含一个 QWidget。QWidget的布局如下:
类画布(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)
我想创建一个半透明的放置区域,如第二张图片所示,带有一个指示放置文件的标签。最合适的方法是什么?
整个小部件都可以允许丢弃。我只想要一个框,表明可以放在这里(如指示器)。
解决方案
当可以放下时,您可以使用动态属性来触发指示器。如果您需要背景是半透明的,请使用 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_())
推荐阅读
- r - 当我尝试处理栅格时,为什么我的计算机内存会迅速消失?
- assembly - 如何在 sse2 上模拟 pcmpgtq?
- javascript - PHP循环数组,jquery打印每个id值
- node.js - 使用 Jest 进行纱线测试失败:无法从“Form.js”中找到模块“react”
- arrays - 如何在 C 中将一个数组复制到另一个数组并获得两个单独的数组?
- flutter - 使用 Riverpod 在 Flutter 中实现拉动刷新
- java - JsonParseException:意外字符('{'(代码 123)):期待双引号开始
- c - 将字符串格式化为特定格式
- flutter - VS Code自定义tasks.json中使用args的问题
- reactjs - 如何动态呈现带有条件的输入字段?