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

PySide6 QML中Label的Component.onCompleted为何被调用两次?

PySide6中pyside6-qml预览Label时Component.onCompleted被调用两次的原因

问题场景

在PySide6虚拟环境中使用pyside6-qml工具预览QML代码时出现异常:

  • 运行Test1.qml时,Component.onCompleted被调用两次,控制台输出两条qml: Label日志:
// Test1.qml
import QtQuick
import QtQuick.Controls

Label {
    text: "Hello"
    Component.onCompleted: console.log("Label")
}
  • 将根元素替换为Window,运行Test2.qml时,仅输出一条qml: Window日志,Component.onCompleted仅被调用一次:
// Test2.qml
import QtQuick
import QtQuick.Window

Window {
    visible: true
    Component.onCompleted: console.log("Window")
}

原因解释

这是因为pyside6-qml工具在预览非Window类型的根元素时,会自动创建一个Window容器来包裹你的根组件,进而导致两次Component.onCompleted触发:

  1. 你的Label组件自身完成初始化,触发第一次回调;
  2. 工具自动创建的Window容器完成初始化的过程中,会导致Label组件被再次实例化或触发完成事件,最终出现两次日志输出。

当根元素是Window时,pyside6-qml直接将其作为顶层容器,不会额外创建包裹的Window,因此只会触发一次Component.onCompleted。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:14:57