如何在 Pyqt5 中切换到另一个屏幕(不打开新窗口)

abh*_*ela 1 python user-interface qt5 pyqt5

我知道这个问题已被问过多次,但我很难理解示例,所以我只有第一个屏幕,我想要的是,当我单击此屏幕时Go to page 2 button,它应该切换到second screen而不打开其他窗口。

步骤-1 单击Go to page 2 button

点击“转到第 2 页”按钮

步骤-2 切换到2nd screen

切换到第二屏幕

步骤-3 切换回1st screen

这是我两个屏幕的代码,我不想加载UI文件

##############################File1.py

class Ui_PageFirst(object):
    def setupUi(self, PageFirst):
        PageFirst.setObjectName("PageFirst")
        PageFirst.resize(123, 132)
        self.centralwidget = QtWidgets.QWidget(PageFirst)
        self.centralwidget.setObjectName("centralwidget")
        self.FirstPageLable = QtWidgets.QLabel(self.centralwidget)
        self.FirstPageLable.setGeometry(QtCore.QRect(0, 0, 121, 71))
        self.FirstPageLable.setAlignment(QtCore.Qt.AlignCenter)
        self.FirstPageLable.setObjectName("FirstPageLable")
        self.btn1 = QtWidgets.QPushButton(self.centralwidget)
        self.btn1.setGeometry(QtCore.QRect(20, 80, 75, 23))
        self.btn1.setObjectName("btn1")
        PageFirst.setCentralWidget(self.centralwidget)

        self.retranslateUi(PageFirst)
        QtCore.QMetaObject.connectSlotsByName(PageFirst)

    def retranslateUi(self, PageFirst):
        _translate = QtCore.QCoreApplication.translate
        PageFirst.setWindowTitle(_translate("PageFirst", "MainWindow"))
        self.FirstPageLable.setText(_translate("PageFirst", "This is page First."))
        self.btn1.setText(_translate("PageFirst", "Go to page 2"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    PageFirst = QtWidgets.QMainWindow()
    ui = Ui_PageFirst()
    ui.setupUi(PageFirst)
    PageFirst.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

##############################File2.py

class Ui_PageSecond(object):
    def setupUi(self, PageSecond):
        PageSecond.setObjectName("PageSecond")
        PageSecond.resize(123, 132)
        self.centralwidget = QtWidgets.QWidget(PageSecond)
        self.centralwidget.setObjectName("centralwidget")
        self.secondPageLable = QtWidgets.QLabel(self.centralwidget)
        self.secondPageLable.setGeometry(QtCore.QRect(0, 0, 121, 71))
        self.secondPageLable.setAlignment(QtCore.Qt.AlignCenter)
        self.secondPageLable.setObjectName("secondPageLable")
        self.btn2 = QtWidgets.QPushButton(self.centralwidget)
        self.btn2.setGeometry(QtCore.QRect(20, 80, 75, 23))
        self.btn2.setObjectName("btn2")
        PageSecond.setCentralWidget(self.centralwidget)

        self.retranslateUi(PageSecond)
        QtCore.QMetaObject.connectSlotsByName(PageSecond)

    def retranslateUi(self, PageSecond):
        _translate = QtCore.QCoreApplication.translate
        PageSecond.setWindowTitle(_translate("PageSecond", "MainWindow"))
        self.secondPageLable.setText(_translate("PageSecond", "This is page Second."))
        self.btn2.setText(_translate("PageSecond", "Go to page 1"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    PageSecond = QtWidgets.QMainWindow()
    ui = Ui_PageSecond()
    ui.setupUi(PageSecond)
    PageSecond.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

小智 5

您必须使用QStackedWidget

class Ui_PageFirst(QMainWindow):    #Page1
    def changeToPage2(self):
        widget.setCurrentWidget(secondpage)

class Ui_PageSecond(QMainWindow):   #Page2
    def changeToPage1(self):
        widget.setCurrentWidget(firstpage)

app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget()
#######
firstpage = Ui_PageFirst()
widget.addWidget(firstpage)   # create an instance of the first page class and add it to stackedwidget

secondpage = Ui_PageSecond() 
widget.addWidget(secondpage)   # adding second page

widget.setCurrentWidget(firstpage)   # setting the page that you want to load when application starts up. you can also use setCurrentIndex(int)
########
widget.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)