我试图从其类的外部设置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)
添加回答
举报
0/150
提交
取消