如何使用PyQt5在同一窗口中更改UI?

2024-05-13 19:48:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用PyQt5。我一直在努力完成一个看似很简单的任务,但还没有得到足够的信息。经过一段相当长时间的谷歌搜索,我已经能够关闭一个窗口,启动另一个加载了另一个用户界面的窗口,但这不是我想在这里做的。在

我想在同一个窗口中切换用户界面。我将UI文件作为全局变量加载到python文件中,其中每个UI有2个类。当我单击一个UI中的特定按钮时,我希望切换到同一窗口中的另一个UI。下面是代码示例:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
from PyQt5.uic import loadUiType
import os

about_company_ui, _ = loadUiType(os.path.join('frontend', 'ui', 'about_company.ui'))
intern_placement_ui, _ = loadUiType(os.path.join('frontend', 'ui', 'intern_placement.ui'))


class InternPlacement(QMainWindow, intern_placement_ui):

    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.intern_pushButton.clicked.connect(self.change)

    def change(self):
        self.about_company = AboutCompany()
        self.about_company.show()
        self.close()


class AboutCompany(QMainWindow, about_company_ui):

    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = InternPlacement()
    window.show()
    app.exec_()


Tags: fromimportselfuiinitosdefplacement
1条回答
网友
1楼 · 发布于 2024-05-13 19:48:35

必须使用QStackedWidget

import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic

ui_folder = os.path.join("frontend", "ui")
about_company_ui, _ = uic.loadUiType(os.path.join(ui_folder, "about_company.ui"))
intern_placement_ui, _ = uic.loadUiType(os.path.join(ui_folder, "intern_placement.ui"))


class InternPlacement(QtWidgets.QMainWindow, intern_placement_ui):
    def __init__(self, parent=None):
        super(InternPlacement, self).__init__(parent)
        self.setupUi(self)


class AboutCompany(QtWidgets.QMainWindow, about_company_ui):
    def __init__(self, parent=None):
        super(AboutCompany, self).__init__(parent)
        self.setupUi(self)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    intern_window = InternPlacement()
    about_window = AboutCompany()
    w = QtWidgets.QStackedWidget()
    w.addWidget(intern_window)
    w.addWidget(about_window)
    intern_window.intern_pushButton.clicked.connect(lambda: w.setCurrentIndex(1))
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

相关问题 更多 >