Pyqt5页面间相互跳转

这篇博客介绍了如何使用PyQT5创建GUI界面并结合YOLV5实现图像识别功能。作者通过创建一个控制器类实现页面间的跳转,包括从主界面跳转到图片识别界面,以及从图片识别界面返回主界面。此外,还展示了如何通过信号和槽机制在不同窗口之间进行通信,以实现实时的界面切换。这种方法适用于构建多窗口应用,尤其适合需要在多个界面之间导航的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近在为yolov5识别制作界面,因为用qt做的界面目前我还无法调用yolov5,因此采用pyqt5来是做界面,方便调用。本方法引入了第三个py文件来实现页面间跳转。

 首先将要进行跳转的界面都导入到创建的第三个文件中(run.py)

from main import Ui_MainWindow as Main_ui
from pic import Ui_dialog as Pic_ui 

其次

# 主窗口
class MainWindow(QtWidgets.QMainWindow, Main_ui):
    switch_window1 = QtCore.pyqtSignal() # 跳转信号
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.btn_pic.clicked.connect(self.goPic)
    def goPic(self):
        self.switch_window1.emit()

# 图片识别窗口
class PicWindow(QtWidgets.QDialog, Pic_ui):
    switch_window5 = QtCore.pyqtSignal()  # 跳转信号
    def __init__(self):
        super(PicWindow, self).__init__()
        self.setupUi(self)
        self.btn_main.clicked.connect(self.goPic_main)
    def goPic_main(self):
        self.switch_window5.emit()

 再创建一个控制器实现页面跳转

# 利用一个控制器来控制页面的跳转
class Controller1:
    def __init__(self):
        self.pic = PicWindow()
        self.main = MainWindow()
        self.vidio = VidioWindow()
        self.pic.hide()
        self.main.hide()
        self.vidio.hide()

    # 跳转到 main 窗口
    def show_main(self):
        self.main.switch_window1.connect(self.show_pic)
        self.main.show()
    # 跳转到 pic窗口
    def show_pic(self):
        self.main.close()
        self.pic.show()

此处想利用这一个控制器实现两个页面来回跳转,但是因为自身水平有限,此处需要再定义一个控制器实现子界面返回主界面 

# 控制器2,实现子界面返回主界面
class Controller2:
    def __init__(self, pic1):
        self.pic = pic1.pic
        self.main = pic1.main
    #pic窗口返回main窗口
    def show_pic_main(self):
        self.pic.switch_window5.connect(self.show_main_)
        self.pic.hide()
    # 显示main窗口
    def show_main_(self):
        self.pic.close()
        self.main.show()

再定义一个main函数

def main():
    app = QtWidgets.QApplication(sys.argv)
    controller1 = Controller1() # 控制器实例
    controller2 = Controller2(controller1)
    controller1.show_main() # 默认展示的是 hello 页面
    controller2.show_pic_main()
    sys.exit(app.exec_())

 最后运行main函数就OK

成果展示:

主界面

跳转到: 

子界面1

并且点击返回主界面按钮就可以返回到主界面,此处就不做演示。 

通过此方法还可实现多界面的来回跳转,此处只显示跳转到第三个界面,并且可以返回。

界面3

结束!        

### PyQt5在实际项目中的界面设计和应用场景 #### 界面设计实例分析 PyQt5 是一种强大的跨平台 Python GUI 工具包,广泛应用于开发桌面应用程序。通过具体案例来理解其应用有助于更好地掌握这一工具。 在一个开源项目中展示了如何利用 PyQt5 创建登录界面并实现与主界面之相互跳转[^1]。此功能不仅限于简单的页面切换;更重要的是它体现了现代软件工程实践中模块化设计理念的应用——即不同组件之清晰分离又紧密协作的关系。为了达到良好的用户体验效果,在设计此类交互逻辑时需考虑多个方面: - **导航流畅度**:确保用户可以在各个视图平滑过渡而不会感到卡顿或延迟。 - **状态管理**:有效处理会话期产生的临时数据以及持久化的偏好设置等信息。 - **安全性考量**:对于涉及敏感操作(如账户验证)的部分要特别注意保护措施到位。 #### 应用场景探讨 除了上述提到的身份认证流程外,PyQt5 还适用于多种其他类型的图形用户接口构建工作。例如,可以通过编写自定义样式表的方式显著提升现有项目的视觉表现力[^2]。这表明即使面对已经成型的产品,开发者依然有机会通过对前端部分做出调整从而满足新的业务需求或是迎合当下流行趋势的变化。 另外值得注意的一点在于,当涉及到较为复杂的多媒体处理任务时,借助第三方扩展库的支持能够极大地方便编程人员快速搭建起具备高级特性的原型系统。比如 `opencv-python` 和 `Pillow` 就是在图像视频领域内非常受欢迎的选择之一[^3]。它们可以被集成到基于 PyQt5 的框架之中用于执行诸如滤镜特效添加、目标检测等功能模块的开发。 ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget class LoginWindow(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.label = QLabel('Login Page') button = QPushButton('Go to Main Window') button.clicked.connect(self.show_main_window) layout.addWidget(self.label) layout.addWidget(button) self.setLayout(layout) def show_main_window(self): main_win = MainWindow() main_win.show() self.close() class MainWindow(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() label = QLabel('Main Application Window') layout.addWidget(label) self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) login_win = LoginWindow() login_win.setWindowTitle('Login Example with PyQt5') login_win.resize(300, 200) login_win.show() sys.exit(app.exec_()) ``` 该代码片段展示了一个简易版的登录窗口向主程序转换过程。这里仅作为概念证明用途,并未加入任何真实的安全机制或其他复杂特性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lc_MVP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值