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

PySide6迁移问题:加载.ui文件时出现空白窗口

问题原因

你创建了两个QDialog实例:一个是继承自QDialog的RollEnterWindow本身(无任何内容,呈现空白),另一个是通过QUiLoader.load()从.ui文件加载的目标QDialog。在PySide6中,当调用子窗口(加载的UI)的show()方法时,作为父窗口的RollEnterWindow会被连带显示,从而出现标题为“python”的空白窗口。

解决方案

方案一:将RollEnterWindow作为UI容器(推荐)

修改类实现,把加载的UI部件嵌入到RollEnterWindow自身(QDialog)中,避免创建额外窗口:

from PySide6.QtWidgets import QDialog, QUiLoader, QVBoxLayout

class RollEnterWindow(QDialog):
    def __init__(self, parent):
        super().__init__(parent)
        uic = QUiLoader()
        # 加载UI文件,当前实例作为父部件
        ui_widget = uic.load('ui/authorize.ui', self)
        # 用布局让UI部件填满整个对话框
        layout = QVBoxLayout(self)
        layout.addWidget(ui_widget)
        self.setLayout(layout)

# 调用方式
roll_enter = RollEnterWindow(self)
roll_enter.show()  # 直接显示RollEnterWindow实例即可

方案二:直接封装加载的UI

如果不需要扩展QDialog的额外功能,可以直接使用加载的UI作为窗口,不额外继承QDialog:

from PySide6.QtWidgets import QUiLoader

class RollEnterWindow:
    def __init__(self, parent):
        uic = QUiLoader()
        self.ui = uic.load('ui/authorize.ui', parent)

# 调用方式
roll_enter = RollEnterWindow(self)
roll_enter.ui.show()
关于exec()的现象解释

当调用self.ui.exec()时,该方法会以模态方式显示对话框,阻塞线程直到对话框关闭。此时RollEnterWindow实例(空白窗口)已被创建,只是在模态对话框关闭后才会触发显示,本质还是父窗口的显示逻辑导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:52:40