首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError:“FaderWidget”对象没有特性“”pixmap_opacity“”

AttributeError:“FaderWidget”对象没有特性“”pixmap_opacity“”
EN

Stack Overflow用户
提问于 2017-01-23 06:23:55
回答 1查看 415关注 0票数 1

我发现了一个关于如何在两个小部件之间进行淡入淡出的很好的例子。现在,我在这里尝试做的是,拆分我在各自的类中构建的每个小部件。这个阶段的代码的问题出在editor_类中,下面的代码行:

代码语言:javascript
复制
self.buttonBox.rejected.connect(stack.setPage1)

当我点击"Cancel“按钮时,它会给出以下结果:

代码语言:javascript
复制
# Result: Traceback (most recent call last):
File "<string>", line 28, in paintEvent
AttributeError: 'FaderWidget' object has no attribute 'pixmap_opacity'

是不是某种育儿上的错误?

谢谢

代码:

代码语言:javascript
复制
import sys
from PySide.QtCore import QTimeLine
from PySide.QtGui import *

class FaderWidget(QWidget):

    def __init__(self, old_widget, new_widget):

        QWidget.__init__(self, new_widget)

        self.old_pixmap = QPixmap(new_widget.size())
        old_widget.render(self.old_pixmap)
        self.pixmap_opacity = 1.0

        self.timeline = QTimeLine()
        self.timeline.valueChanged.connect(self.animate)
        self.timeline.finished.connect(self.close)
        self.timeline.setDuration(333)
        self.timeline.start()

        self.resize(new_widget.size())
        self.show()

    def paintEvent(self, event):

        painter = QPainter()
        painter.begin(self)
        painter.setOpacity(self.pixmap_opacity)
        painter.drawPixmap(0, 0, self.old_pixmap)
        painter.end()

    def animate(self, value):

        self.pixmap_opacity = 1.0 - value
        self.repaint()

class StackedWidget(QStackedWidget):

    def __init__(self, parent = None):
        QStackedWidget.__init__(self, parent)

    def setCurrentIndex(self, index):
        self.fader_widget = FaderWidget(self.currentWidget(), self.widget(index))
        QStackedWidget.setCurrentIndex(self, index)

    def setPage1(self):
        self.setCurrentIndex(0)

    def setPage2(self):
        self.setCurrentIndex(1)

    def setPage3(self):
        self.setCurrentIndex(2)

    def setPage4(self):
        self.setCurrentIndex(3)


class editor_(QWidget):
    """build a text editor"""
    def __init__(self):
        super(editor_, self).__init__()

        editor = QTextEdit()
        editor.setPlainText("Kawabungaaaa! "*100)

        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

        self.buttonBox.accepted.connect(self.close)
        self.buttonBox.rejected.connect(stack.setPage1)

        layout = QVBoxLayout()
        layout.addWidget(editor)
        layout.addWidget(self.buttonBox)

        self.setLayout(layout)


class mainWidget(QWidget):
    def __init__(self):
        super(mainWidget, self).__init__()

        self.setMinimumSize(500,300)        

        widget1 = QWidget()
        widget2 = QCalendarWidget()
        widget3 = QListView()
        widget4 = editor_()

        grid = QGridLayout()

        allPlates = QPushButton("Calendar")
        singlePlate = QPushButton("ListView")
        allRoto = QPushButton("Editor")
        allLighting = QPushButton("Buttons")

        grid.addWidget(allPlates,0,0)
        grid.addWidget(singlePlate,0,1)
        grid.addWidget(allRoto,1,0)
        grid.addWidget(allLighting,1,1)

        widget1.setLayout(grid)

        stack = StackedWidget()
        stack.addWidget(widget1)
        stack.addWidget(widget2)
        stack.addWidget(widget3)
        stack.addWidget(widget4)

        layout = QHBoxLayout()
        layout.addWidget(stack)
        self.setLayout(layout)

        allPlates.clicked.connect(stack.setPage2)
        singlePlate.clicked.connect(stack.setPage3)
        allRoto.clicked.connect(stack.setPage4)
        allLighting.clicked.connect(stack.setPage1)


a = mainWidget()
a.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 07:23:47

您不能使用资源,但这不在当前环境中。在您的示例中,堆栈没有在editor_类中定义,因此它将生成一个错误。要解决此问题,您必须在创建它们之后进行连接,并且在您的情况下为mainWidget

代码语言:javascript
复制
# ...
stack.addWidget(widget4)
widget4.buttonBox.rejected.connect(stack.setPage1)
# ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41796800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档