为了账号安全,请及时绑定邮箱和手机立即绑定

QStackedWidget的setCurrentIndex从其类外部

QStackedWidget的setCurrentIndex从其类外部

摇曳的蔷薇 2021-04-29 14:09:55
我试图从其类的外部设置StackedWidget的索引,但是却收到一个错误,即该对象没有属性。我的代码如下(我为缩进感到抱歉,未正确粘贴):import sysfrom functools import partialfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5 import QtCore, QtWidgets, QtGuiclass 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”在此先感谢您的指导。
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

我认为您对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)


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 680 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号