【问题标题】:stackedWidget using pyqt使用pyqt的stackedWidget
【发布时间】:2016-09-04 17:23:48
【问题描述】:

我是 Python、QT4 和 pyqt 的新手,我无法使用 setCurrentIndex 更改小部件。我确定我没有正确使用它,但这是我的初始代码。首先是pyqt代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created: Thu May  5 17:15:28 2016
#      by: PyQt4 UI code generator 4.9.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(400, 300)
        self.centralWidget = QtGui.QWidget(MainWindow)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.stackedWidget = QtGui.QStackedWidget(self.centralWidget)
        self.stackedWidget.setGeometry(QtCore.QRect(-41, -41, 451, 311))
        self.stackedWidget.setObjectName(_fromUtf8("stackedWidget"))
        self.page = QtGui.QWidget()
        self.page.setObjectName(_fromUtf8("page"))
        self.label = QtGui.QLabel(self.page)
        self.label.setGeometry(QtCore.QRect(180, 70, 50, 16))
        self.label.setObjectName(_fromUtf8("label"))
        self.pushButton = QtGui.QPushButton(self.page)
        self.pushButton.setGeometry(QtCore.QRect(170, 140, 80, 27))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtGui.QWidget()
        self.page_2.setObjectName(_fromUtf8("page_2"))
        self.label_2 = QtGui.QLabel(self.page_2)
        self.label_2.setGeometry(QtCore.QRect(200, 90, 50, 16))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.stackedWidget.addWidget(self.page_2)
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("MainWindow", "Page 1", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Go to 2", None, QtGui.QApplication.UnicodeUTF8))
        self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Page 2", None, QtGui.QApplication.UnicodeUTF8))

这是我正在尝试的代码:

导入系统 从表单导入 *

class MyDialog(QtGui.QMainWindow):
  def __init__(self, parent=None):
     QtGui.QWidget.__init__(self, parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.pushButton.clicked.connect(self.Change)

  def Change(self):
     self.stackedWidget.setCurrentIndex(1)

if __name__ == "__main__":
   app = QtGui.QApplication(sys.argv)
   myapp = MyDialog()
   myapp.show()
   sys.exit(app.exec_())

当我按下按钮时,出现错误“'MyDialog' 对象没有属性 'stackedWidget'。

我相信这对有经验的程序员来说很容易。

【问题讨论】:

    标签: python pyqt qt4


    【解决方案1】:

    错误消息的含义与它的含义完全相同:MyDialog 没有创建名为 self.stackedWidget 的成员变量,但它尝试访问 Change 中的此类变量,因此当您单击按钮时会引发 AttributeError .你想要的变量是self.ui的成员,它是UI_MainWindow的一个实例。

    解决办法是将方法Change改为:

    def Change(self):
        self.ui.stackedWidget.setCurrentIndex(1)
    

    【讨论】:

    • 工作就像一个魅力。
    • @dporada 好。如果您不介意,请采纳答案。
    • 我想我做到了。你能帮忙解答我的后续问题吗,或者 PM 我@dporada@rke.com
    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多