Python PyQt5:使用designer创建多个视图,并在一个应用程序中连接它们

Python PyQt5:使用designer创建多个视图,并在一个应用程序中连接它们,python,pyqt,pyqt5,qt-designer,Python,Pyqt,Pyqt5,Qt Designer,我在PyQt5中完成了一个简单的应用程序,我在QT designer中设计了UI,用py代码转换成pyuic5,并通过python解释器运行它 现在我想添加另一个UI视图,尽管我不熟悉PyQt5,而且我发现的大部分教程只提到一个视图。 例如,如果我使用Visual Studio,我可以创建一个新表单,并在按下按钮时使用show和hide方法来显示它们,但我不确定如何对PyQt5执行同样的操作 从pyuic5转换的代码还包括if\uuuuu name\uuuu==“\uuuu main\uuuu”

我在PyQt5中完成了一个简单的应用程序,我在QT designer中设计了UI,用py代码转换成
pyuic5
,并通过python解释器运行它

现在我想添加另一个UI视图,尽管我不熟悉PyQt5,而且我发现的大部分教程只提到一个视图。 例如,如果我使用Visual Studio,我可以创建一个新表单,并在按下按钮时使用show和hide方法来显示它们,但我不确定如何对PyQt5执行同样的操作

pyuic5
转换的代码还包括
if\uuuuu name\uuuu==“\uuuu main\uuuu”
函数,该函数创建实例并运行应用程序,因此仅获取其上的任何内容就足够了,仅获取UI数据吗?如何从中创建视图,以便根据需要显示和隐藏它?谢谢

编辑: 更进一步,因为我找到了加载
UI
文件的不同方法。PyQt似乎有一种方法可以直接加载UI文件,而不是在python代码中转换它。这意味着我可以创建一个类,该类是我正在使用的窗口类型的子类(例如:
QApplication
QMainWindow
QWidget
等等),并且我可以访问该对象,就像它是Visual Studio中的表单一样

from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5.uic import loadUI

class UIObject(QMainWindow):

    def __init__(self):
        super(UIObject, self).__init__()
        loadUI('mainapp.ui', self)
        self.mybutton1.clicked.connect(self.printhello)

    def printhello():
        print("hello")

app = QApplication(sys.argv)
mainview = UIObject()
mainview.show()
sys.exit(app.exec_())

这将加载UI文件并在屏幕上显示;我假设我可以使用相同的构造加载多个
ui
文件,然后像在VisualStudio中那样显示或隐藏它们?看起来很简单,但对QT或PyQT不太了解,我不确定为什么这种处理
ui
文件的方法在教程中并不常见;我在阅读文档时偶然发现了它。

找到了解决方案,将不同论坛的各种答案和帖子混在一起

创建第一个类作为
QMainWindow
,在
中使用
loadUi
加载QT设计器文件。然后创建第二个类,该类保存第二个表单/视图,并在
\uuuuu init\uuuu
中作为参数传递父视图(您的第一个类,或您可能需要的任何其他类);因此,您可以在单击按钮时隐藏主视图并显示第二个视图。关闭次视图时,上一个视图将再次显示

您可以添加任意多个不同的窗口;诀窍是始终将父对象传递给它们中的每一个,并记住相应地显示/隐藏它们。比VisualStudio表单复杂得多,但它是可行的

class FirstForm(QMainWindow):

    def __init__(self):
        super(FirstForm, self).__init__()
        loadUi('firstform.ui', self)
        self.button1.clicked.connect(self.openOtherForm)

    def openOtherForm(self):
        self.hide()
        otherview = SecondForm(self)
        otherview.show()

class SecondForm(QDialog):

    def __init__(self, parent=None):
        super(SecondForm, self).__init__(parent)
        loadUi('secondform.ui', self)
        self.button2.clicked.connect(self.goBackToOtherForm)

    def openOtherForm(self):
        self.parent().show()
        self.close()

app = QApplication(sys.argv)
main = FirstForm()
main.show()
sys.exit(app.exec_())