pyqt5 多界面实现ui和逻辑层分离

遇到的问题,使用pyqt5搭界面时,切换到分界面,但是分界面里面的按钮(btn_OpenImage.clicked)没有响应,分界面逻辑层已经单独运行过,没有问题,就是和主界面结合时候出问题,没有响应,各位帮忙看看,下面是主界面逻辑层和其中一个分界面逻辑层

主界面的逻辑文件:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFrame
import Form_0

from Form_1main import Form1Code   #这里增加了!!!!!!
from Form_2main import Form2Code   #这里增加了!!!!!!

class MainFormCode(QFrame, Form_0.Ui_Form):
    def __init__(self):
        super(MainFormCode, self).__init__()
        self.setupUi(self)


        self.pushButton_1.clicked.connect(self.display1)
        self.pushButton_2.clicked.connect(self.display2)


        self.ui1 = Form1Code() # 实例化第一个页面
        self.ui2 = Form2Code()  # 实例化第二个页面

        self.ui1.setupUi(self.page_1)  # 加载在第一个子控件上
        self.ui2.setupUi(self.page_2)  # 加载在第二个子控件上


    def display1(self):
        self.stackedWidget.setCurrentIndex(0)

    def display2(self):
        self.stackedWidget.setCurrentIndex(1)



if __name__ == '__main__':
    app = QApplication(sys.argv)
    md = MainFormCode()
    md.show()
    sys.exit(app.exec_())


第一个分界面逻辑文件:

from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QLabel, QFrame, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QPen, QImage
from PyQt5.QtCore import Qt, QRect
import Form_1
import cv2
import math
import numpy as np
import copy

class Form1Code(QFrame, Form_1.Ui_Form1):
    def __init__(self):
        super(Form1Code, self).__init__()
        self.setupUi(self)

        self.btn_OpenImage.clicked.connect(self.openImage)



    def openImage(self):
        files, _ = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
        if files:
            self.img = cv2.imread(files)
            if self.img is not None:
                pixmap = self.cvToPixmap(self.img)
                self.lbl_ShowImage.setPixmap(pixmap)

【以下回答由 GPT 生成】

问题我理解的是你使用pyqt5搭建界面时,切换到分界面后,按钮没有响应。已经单独运行分界面逻辑层时,没有问题,只是和主界面结合时出现问题。以下是主界面逻辑层和其中一个分界面逻辑层的代码:

主界面的逻辑文件:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFrame
import Form_0

from Form_1main import Form1Code   # 这里增加了!!!!
from Form_2main import Form2Code   # 这里增加了!!!!

class MainFormCode(QFrame, Form_0.Ui_Form):
    def __init__(self):
        super(MainFormCode, self).__init__()
        self.setupUi(self)

        self.pushButton_1.clicked.connect(self.display1)
        self.pushButton_2.clicked.connect(self.display2)

        self.ui1 = Form1Code() # 实例化第一个页面
        self.ui2 = Form2Code()  # 实例化第二个页面

        self.ui1.setupUi(self.page_1)  # 加载在第一个子控件上
        self.ui2.setupUi(self.page_2)  # 加载在第二个子控件上

    def display1(self):
        self.stackedWidget.setCurrentIndex(0)

    def display2(self):
        self.stackedWidget.setCurrentIndex(1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    md = MainFormCode()
    md.show()
    sys.exit(app.exec_())

第一个分界面逻辑文件:

from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QLabel, QFrame, QWidget
from PyQt5.QtGui import QPixmap, QPainter, QPen, QImage
from PyQt5.QtCore import Qt, QRect
import Form_1
import cv2
import math
import numpy as np
import copy

class Form1Code(QFrame, Form_1.Ui_Form1):
    def __init__(self):
        super(Form1Code, self).__init__()
        self.setupUi(self)

        self.btn_OpenImage.clicked.connect(self.openImage)

    def openImage(self):
        files, _ = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
        if files:
          # 处理打开图片的逻辑

你遇到的问题是按钮 btn_OpenImage 在切换到分界面后没有响应。请确认以下几点: - 分界面的 Form_1 类是否正确连接到了UI文件 Form_1.ui。 - 分界面的 Form_1 类是否正确继承了 QFrameForm_1.Ui_Form1。 - 在打开图片的逻辑函数 openImage 中是否完成了图片处理的逻辑代码。

请检查以上内容,如果问题仍存在,请提供更多的代码和错误信息以便我能更好地帮助您。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^