QStackedWidget的setCurrentIndex从其类外部

我试图从其类的外部设置StackedWidget的索引,但是却收到一个错误,即该对象没有属性。我的代码如下(我为缩进感到抱歉,未正确粘贴):


import sys

from functools import partial

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

from PyQt5 import QtCore, QtWidgets, QtGui


class MainWindow(QMainWindow):

  def __init__(self, parent=None):


    QMainWindow.__init__(self, parent)

    self.setWindowTitle('Sample')

    self.resize(400,400)

    qr = self.frameGeometry()  

    cp = QDesktopWidget().availableGeometry().center()  

    qr.moveCenter(cp)  

    self.move(qr.topLeft())  


    self.central_widget = QStackedWidget()

    self.setCentralWidget(self.central_widget)

    self.start_screen = ut_Screen1()

    self.central_widget.addWidget(self.start_screen)

    self.central_widget.setCurrentWidget(self.start_screen)


class ut_Screen1(QWidget):

  def __init__ ( self ):

    super ( ut_Screen1, self ).__init__ ()


    nav_layout = QVBoxLayout()

    nav_layout.setSpacing(0)

    nav_layout.setContentsMargins(0,0,0,0)

    self.setLayout(nav_layout)

    self.frame_top = QFrame()

    self.frame_top.setMinimumSize(QtCore.QSize(400,100))

    self.frame_top.setMaximumSize(QtCore.QSize(400, 100))

    self.frame_top.setStyleSheet("background-color: rgb(100, 100, 255)")


    self.frame_top.stack_t1 = ut_Nav()

    self.frame_top.StackTop = QStackedWidget(self)

    self.frame_top.StackTop.addWidget(self.frame_top.stack_t1)

    layout_top_h = QVBoxLayout(self.frame_top)

    layout_top_h.addWidget(self.frame_top.StackTop)


    self.stack_b1 = ut_Bottom1()

    self.stack_b2 = ut_Bottom2()

    self.StackBot = QStackedWidget(self)

    self.StackBot.addWidget(self.stack_b1)

    self.StackBot.addWidget(self.stack_b2)


    nav_layout.addWidget(self.frame_top)

    nav_layout.addWidget(self.StackBot)



单击该按钮时,出现错误:


类型对象“ ut_Screen1”没有属性“ StackBot”


在此先感谢您的指导。


摇曳的蔷薇
浏览 681回答 1
1回答

暮色呼如

我认为您对OOP的知识很差,因此建议您对其进行复习。类是一个抽象概念,它仅对使用该类创建的对象的行为建模,因此ut_Screen1不是对象,而是类的名称。只有对象可以使用该类的非静态方法。总之,您不应使用ut_Screen1。一种可能的解决方案是使用MainWindow类的myWindow对象访问名为start_screen的ut_Screen1类的对象:def ut_ButtonClicked(name):    try:        if name == "Button1":            myWindow.start_screen.StackBot.setCurrentIndex(1)    except Exception as e:        print(e)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python