首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"QStackedWidget.setCurrentIndex":不工作或错误标记

"QStackedWidget.setCurrentIndex":不工作或错误标记
EN

Stack Overflow用户
提问于 2016-08-26 06:54:23
回答 1查看 2K关注 0票数 2

我正在用PyQt5做一个图形界面的程序。我想要做的是,当用户按下某个按钮时,此更改小部件并显示其他选项。

为此,我决定使用QStackedWidget,我的所有界面都是从QT5设计器构建的。

然而,在我的代码中,想要确定按下我的名字按钮"btfr“时显示我的stackedWidget的"page_2”,使用QStackedWidget.setCurrentIndex方法,这不会做任何事情或产生任何错误。

代码如下:

代码语言:javascript
运行
复制
import sys
from PyQt5 import uic
from PyQt5.QtCore import QTimeLine
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

infz = uic.loadUiType("main.ui")[0]


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.stack = MyWindowClass()
        self.a = self.stack.stackedWidget.currentWidget()
        self.b = self.stack.stackedWidget.widget(index)
        self.fader_widget = FaderWidget(self.a, self.b)
        QStackedWidget.setCurrentIndex(self, index)
        print(self, index)

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

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


class MyWindowClass(QStackedWidget, infz):
    def __init__(self, parent=None):
        global pos, c, f
        self.pos = 0
        self.c = []
        self.f = False
        QStackedWidget.__init__(self, parent)
        self.setupUi(self)
        self.setWindowTitle('SkR')

if __name__ == "__main__":

    app = QApplication(sys.argv)

    window = MyWindowClass()
    window.resize(788, 518)
    stack = StackedWidget()
    window.btfr.clicked.connect(stack.setPage2)
    window.btnpx.clicked.connect(stack.setPage1)
    window.show()

    sys.exit(app.exec_())

我对这段代码的意图是,小部件的更改会产生这样的效果:“淡出”。

如果我打印"self“和"index”,接收的QStackedWidget.setCurrentIndex显示如下:

代码语言:javascript
运行
复制
<__main__.StackedWidget object at 0x7fc2eb6b5c18> 0

数字0是索引,另一个元素是self

谢谢你的关注,我希望有人能帮上忙。

EN

回答 1

Stack Overflow用户

发布于 2016-08-26 12:00:00

你的问题不是很清楚,但你不是只是想:

代码语言:javascript
运行
复制
def setIndex(self, index):
    self.setCurrentIndex(index)

但是,这有点多余,因为您应该能够将按钮直接链接到setCurrentIndex方法,并使用lambda传递索引值:

代码语言:javascript
运行
复制
btfr.clicked.connect(lambda: self.setCurrentIndex(2))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39155952

复制
相关文章

相似问题

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