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

2024-04-20 16:25:45 发布

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

LAYOUT IMAGe

为便于参考,请考虑上述示例。在

左边有两个按钮PAGE1和PAGE2,右边有一个QStackedWidget,由两个widget组成。在

我用page1.UI和page2.UI创建了两个独立的UI文件 enter image description here

我用“Promote Widget”在堆栈小部件中添加page1.ui和page2.ui。 (参考图片)

以下是我的文件结构:

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

我想实现的是,我能够从堆栈小部件内部的小部件更改堆栈小部件的索引。在

目前我只能通过使用中的按钮来更改堆叠小部件的索引主.ui. 在

代码: 主.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_())

第1.py页:

^{pr2}$

page2.py类似于page1.py

假设我在page1.ui中有一个按钮,如何使用这个按钮来更改堆叠小部件的索引?在

如果你觉得我遗漏了什么或者对我到底想做什么有疑问,请留言。在


Tags: pathpyimportselfappui堆栈os
1条回答
网友
1楼 · 发布于 2024-04-20 16:25:45

好吧,我设法让它工作了。结果发现解决方法很简单

以下是我所做的: 主.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_())

相关问题 更多 >