0

布局图像

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

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

我制作了两个单独的 UI 文件,名称分别为 page1.ui 和 page2.ui 在此处输入图像描述

我使用“Promote Widget”在堆叠的小部件中添加 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 的索引?

如果您觉得我遗漏了什么或对我到底想要做什么有疑问,请发表评论。

4

1 回答 1

0

好的,我设法让它工作。事实证明解决方案非常简单

这是我所做的: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))


        self.page_1.pushButton.clicked.connect(self.foo)
        #the above line calls foo() inside main.py when a button on page_1 is clicked



    def foo(self):
        # set stack widget to what ever you need
        self.stackedWidget.setCurrentIndex(1)


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_())
于 2018-12-28T12:08:19.077 回答