python - 如何使用 PyQt5 在同一窗口中更改 UI?
问题描述
我刚刚开始使用 PyQt5。我一直在尝试完成一项看似非常简单的任务,但无法获得足够的信息。经过一番谷歌搜索后,我已经能够关闭一个窗口并在加载另一个 UI 的情况下启动另一个窗口,但这不是我想要在这里做的。
我想在同一个窗口中切换 UI。我将 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_()
解决方案
你必须使用一个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_())
推荐阅读
- python - 如何检查数字是 3 的倍数还是包含数字 5?
- react-native - TypeError: undefined is not an object (评估'props.navigation.navigate')
- mysql - MySQL 连接器:哪个更快...WHERE NOT EXISTS... 还是以前的选择?
- excel - VBA:通过 VBA 添加切片器会导致 VBA 项目在工作簿关闭后保持打开状态
- scikit-learn - 探索正则函数的排列重要性
- java - Exo player 2.8.2 总是以低带宽流开始
- python - 循环嵌套字典以创建新字典
- c# - C# Form app:使用HttpClient从磁盘上传xml文件,NodeJS服务器:正确接收xml文件
- c - 在 gcc 链接期间查看符号在哪里查找?
- python - python迭代函数绘制三角形