如何从PyQt5中的QStackedWidget内的Widget调用Windows主函数

时间:2018-12-28 09:23:50

标签: python pyqt pyqt5 qstackedwidget

LAYOUT IMAGe

出于参考目的,请考虑以上示例。

在左侧,我有两个按钮PAGE1和PAGE2,在右侧,我有一个由两个小部件组成的QStackedWidget。

我制作了两个分别名为page1.ui和page2.ui的UI文件。 enter image description here

我使用“促销小部件”在堆叠的小部件内添加page1.ui和page2.ui。 (请参阅图片以供参考)

以下是我的文件结构:

├── main.py ├── pages │ ├── page1.py │ ├── page2.py └── ui ├── main.ui ├── page1.ui ├── page2.ui

我想要实现的是,我能够从Stacked Widget内部的Widget中更改Stacked Widget的索引。

当前,我只能使用main.ui中的按钮来更改Stacked Widget的索引。

代码: main.py

import os
from PyQt5 import QtGui, uic, QtWidgets
from functools import partial


current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "ui/main.ui"))

class MainWidget(Base, Form):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__(parent)
        self.setupUi(self)
        buttons = (self.page1Button, self.page2Button)
        for i, button in enumerate(buttons):
            button.clicked.connect(partial(self.stackedWidget.setCurrentIndex, i))



if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication.instance()
    if app is None:
        app = QtWidgets.QApplication(sys.argv)

    app.setStyle("fusion")
    w = MainWidget()
    w.show()
    sys.exit(app.exec_())

page1.py:

import os
from PyQt5 import QtGui, uic, QtWidgets

current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "../ui/page1.ui"))

class page1Window(Base, Form):
    def __init__(self, parent=None):
        super(self.__class__, self).__init__(parent)
        self.setupUi(self)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = page1Window()
    w.show()
    sys.exit(app.exec_())

page2.py与page1.py

相似

假设我在page1.ui中有一个按钮,如何使用此按钮更改使用此按钮的Stacked Widget的索引?

如果您觉得我遗漏了任何东西或对我真正想做的事情有疑问,请发表评论。

1 个答案:

答案 0 :(得分:0)

好的,我设法使其正常运行。事实证明,解决方案非常简单

这是我所做的: main.py:

let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Login")
self.present(viewController, animated: false, completion: nil)