Ric*_*ard 3 python pyqt pyqt5 qgraphicseffect
我想使用QGraphicsDropShadowEffect在几个小部件上设置阴影,我想知道是否有更好的方法这样做,而不必为我想要使用它的每个实例反复编写相同的代码,如下面的示例所示.是否可以创建一个类或要调用的东西,以便我只需要设置setGraphicsEffect()小部件?我试图为它创建一些类,但我仍然只能让它们创建一个阴影.
import sys
from PyQt5.QtWidgets import QWidget, QHBoxLayout, \
QGraphicsDropShadowEffect, QPushButton, QApplication, QComboBox
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
layout = QHBoxLayout()
self.shadow = QGraphicsDropShadowEffect()
self.shadow.setBlurRadius(5)
self.shadow.setXOffset(3)
self.shadow.setYOffset(3)
self.shadow2 = QGraphicsDropShadowEffect()
self.shadow2.setBlurRadius(5)
self.shadow2.setXOffset(3)
self.shadow2.setYOffset(3)
self.btn = QPushButton("Button")
self.btn.setGraphicsEffect(self.shadow)
self.combo = QComboBox()
self.combo.setGraphicsEffect(self.shadow2)
layout.addWidget(self.btn)
layout.addWidget(self.combo)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
该文档指出相同QGraphicsEffect不能被其他窗口小部件被共享:
如果effect是对其他窗口小部件的安装效果,
setGraphicsEffect()则会从窗口小部件中删除该效果并将其安装在此窗口小部件上.
因此,您必须QGraphicsEffect为每个窗口小部件创建一个,但如果您不想编写大量代码并希望应用具有类似特征的效果,则可以遍历窗口小部件并为此可以使用findChildren(...).
import sys
from PyQt5.QtWidgets import QWidget, QHBoxLayout, \
QGraphicsDropShadowEffect, QPushButton, QApplication, QComboBox
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
layout = QHBoxLayout(self)
self.btn = QPushButton("Button")
self.combo = QComboBox()
layout.addWidget(self.btn)
layout.addWidget(self.combo)
for children in self.findChildren(QWidget):
shadow = QGraphicsDropShadowEffect(blurRadius=5, xOffset=3, yOffset=3)
children.setGraphicsEffect(shadow)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
702 次 |
| 最近记录: |