m0_47289071 2024-07-24 00:54 采纳率: 20%
浏览 7

pyqt5页面切换卡顿

pyqt5俩个页面多次快速的互相切换后,程序会变卡顿,但是切换的时候都用了self.close()来销毁方法
**页面1 **

    def fan_hui(self):
        self.Open_Sou_ye = sou_Ye.MainWindow2()
        self.emitter.authority.connect(self.Open_Sou_ye.ying_chang)
        # 发射信号
        self.emitter.authority.emit(self.con)
        # 显示窗口
        self.Open_Sou_ye.show()
        self.close()

页面2

    def on_zhan_Can_xin_li(self):
        self.di_q_Z_l = zhan_Zheng_faGui1.MainWindow5()
        self.di_q_Z_l.show()
        self.close()

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 00:54
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    从您提供的代码片段来看,您在两个页面之间的切换使用了 self.close() 方法,但是这种方法可能不是最佳实践,因为它会立即关闭窗口,而没有考虑到可能存在的资源清理或者信号连接的断开。以下是一些建议和改进方案:

    改进方案

    1. 使用信号和槽进行页面切换:确保在切换页面时,所有相关的信号连接都已经正确地断开。
    2. 使用 QStackedWidgetQTabWidget:这些控件可以帮助您管理多个页面,并且可以避免频繁的窗口创建和销毁。
    3. 资源管理:确保在页面关闭时释放所有资源,如线程、数据库连接等。

    示例代码

    以下是一个使用 QStackedWidget 来管理页面切换的示例:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QStackedWidget
    
    class MainWindow(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle("Main Window")
            self.setGeometry(300, 300, 300, 200)
    
            # 创建页面
            self.page1 = QWidget()
            self.page2 = QWidget()
    
            # 初始化页面1
            self.page1_layout = QVBoxLayout()
            self.page1_btn = QPushButton("Go to Page 2", self.page1)
            self.page1_layout.addWidget(self.page1_btn)
            self.page1.setLayout(self.page1_layout)
    
            # 初始化页面2
            self.page2_layout = QVBoxLayout()
            self.page2_btn = QPushButton("Go to Page 1", self.page2)
            self.page2_layout.addWidget(self.page2_btn)
            self.page2.setLayout(self.page2_layout)
    
            # 创建堆叠控件
            self.stackedWidget = QStackedWidget()
            self.stackedWidget.addWidget(self.page1)
            self.stackedWidget.addWidget(self.page2)
    
            # 连接按钮点击事件
            self.page1_btn.clicked.connect(self.showPage2)
            self.page2_btn.clicked.connect(self.showPage1)
    
            # 设置主布局
            main_layout = QVBoxLayout()
            main_layout.addWidget(self.stackedWidget)
            self.setLayout(main_layout)
    
        def showPage2(self):
            self.stackedWidget.setCurrentWidget(self.page2)
    
        def showPage1(self):
            self.stackedWidget.setCurrentWidget(self.page1)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        mainWin = MainWindow()
        mainWin.show()
        sys.exit(app.exec_())
    

    说明

    • QStackedWidget:这个控件允许您将多个页面堆叠在一起,并且可以通过 setCurrentWidget 方法来切换显示的页面。
    • 信号连接:示例中通过按钮的 clicked 信号连接到页面切换的方法,这样可以在点击按钮时切换页面。
    • 资源管理:在这个示例中,页面的创建和销毁由 QStackedWidget 管理,因此不需要手动释放资源。

    通过使用 QStackedWidget,您可以避免因频繁创建和销毁窗口而导致的卡顿问题,并且可以更有效地管理页面之间的切换。同时,确保在页面切换时正确地管理信号连接和资源释放,以避免潜在的性能问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月24日

悬赏问题

  • ¥15 CDH6.3 运行hive -e hive -e "show databases;"报错:hive-env.sh:行24: hbase-common.jar: 权限不够
  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里