You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6中QMdiArea拖拽QMdiSubWindow出现残影卡顿问题求助

PySide6 QMdiArea拖拽子窗口残留残影、卡顿问题修复方案

核心问题诱因

你的代码存在两处逻辑错误直接触发了该故障:

  • 子窗口尚未添加到QMdiArea时就提前调用了show()方法,打乱了QMdiArea内置的渲染调度逻辑,导致绘制层级异常
  • 子窗口添加到QMdiArea完成后直接清空了持有子窗口引用的subwindow_dict,Python端无有效引用的子窗口对象会被垃圾回收机制销毁,Qt端残留无效渲染节点,最终引发残影、操作卡顿问题

修复步骤

  1. 移除子窗口创建阶段的show()调用,子窗口的显示逻辑交由QMdiArea统一调度,或在全部添加完成后统一控制
  2. 保留subwindow_dict作为MainWindow的实例属性长期持有子窗口引用,不要在添加完成后清空
  3. (可选优化)为QMdiArea设置全视口更新模式,避免复杂场景下局部更新残留问题

修正后核心代码示例

from PySide6.QtWidgets import QMdiArea # 确保导入对应类

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # 可选优化:设置全视口更新模式
        self.ui.mdiArea.setViewportUpdateMode(QMdiArea.FullViewportUpdate)
        # 子窗口引用字典改为实例属性长期持有
        self.subwindow_dict = {}
        self.initialize_subwindows()
        self.ui.mdiArea.tileSubWindows()
    
    def initialize_subwindows(self):
        self.create_build_overview_subwindow()
        self.create_object_properties_subwindow()
        for window in self.subwindow_dict.values():
            self.ui.mdiArea.addSubWindow(window)
        # 移除清空字典的操作
        # self.subwindow_dict.clear()
    
    def create_build_overview_subwindow(self):
        build_overview_window = QMdiSubWindow()
        build_overview_window.setWindowTitle('Build Overview')
        # 移除提前调用的show()
        # build_overview_window.show()
        self.subwindow_dict.update({'build_overview':build_overview_window})

    def create_object_properties_subwindow(self):
        object_properties_window = QMdiSubWindow()
        object_properties_window.setWindowTitle('Object Properties')
        # 移除提前调用的show()
        # object_properties_window.show()
        self.subwindow_dict.update({'object_properties':object_properties_window})

修改完成后运行即可解决残影和卡顿问题。

内容的提问来源于stack exchange,提问作者JacobianFunction

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:24:03