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
相关产品推荐
相关产品推荐

