首页 > 编程问答 >PySide 的 QUiLoader 不显示小部件

PySide 的 QUiLoader 不显示小部件

时间:2024-07-24 16:51:17浏览次数:9  
标签:python pyside6

我在 Designer 中开发了一个有点复杂的 UI,并使用 QUiLoader 将其加载到 PySide6 中。 它在开发过程中有效,但当我认为我已经完成时,它不再显示任何内容。脚本启动并运行,只是不再显示任何窗口。

我在 Windows 11、Python 3.12/PySide 6.7.2 和 3.11 上使用 PySide 运行此脚本。

我会给你一个具有相同行为的精简版本,我真的希望你能帮助我: (HelloWorld.ui的路径是正确的,我检查了好几遍)

from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout

class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        loader = QUiLoader()
        ui_file = QFile('D:/Path/to/HelloWorld.ui')
        ui_file.open(QFile.ReadOnly)
        self.window = loader.load(ui_file, self)
        root_layout = QVBoxLayout()
        root_layout.addWidget(self.window)
        self.setLayout(root_layout)
        ui_file.close()
app = QApplication.instance()
if not app:
    app = QApplication()
window = Window()
window.show()
app.exec()

代码中存在一个微妙的错误,导致小部件不显示。问题出在创建和使用布局的方式上。

正在创建 Window 小部件,并使用 QUiLoader .ui 文件加载到 self.window 中。然后,创建一个新的 QVBoxLayout 并尝试将 self.window 添加到此布局中。

问题 在于 没有将布局设置到任何地方 。正在 Window 小部件上调用 setLayout ,但正在尝试设置 self.window 的布局,该布局是从 .ui 文件加载的小部件。

解决此问题的最简单方法是 直接将加载的小部件设置为 Window 小部件的中心小部件,而不使用额外的布局

以下是更正后的代码:

from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QApplication, QWidget

class Window(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        loader = QUiLoader()
        ui_file = QFile('D:/Path/to/HelloWorld.ui')
        ui_file.open(QFile.ReadOnly)
        self.window = loader.load(ui_file, self)
        ui_file.close()

        # 将加载的小部件直接设置为中心小部件
        self.setLayout(self.window.layout())

app = QApplication.instance()
if not app:
    app = QApplication()
window = Window()
window.show()
app.exec()

通过使用 self.setLayout(self.window.layout()) ,将从 .ui 文件加载的布局应用到 Window 小部件,从而确保所有小部件都正确显示。

其他建议:

  • 为了使代码更简洁,可以使用 with 语句打开和关闭 .ui 文件:
with QFile('D:/Path/to/HelloWorld.ui') as ui_file:
    ui_file.open(QFile.ReadOnly)
    self.window = loader.load(ui_file, self)
  • 确保 .ui 文件中的顶级布局设置为“布局”,例如“垂直布局”或“水平布局”。 这将确保加载的小部件自动调整大小并正确显示。

标签:python,pyside6
From: 78787256

相关文章

  • Python ctypes OSError:[WinError 1114]动态链接库(DLL)初始化例程失败
    我试图使用Python中的ctypes库调用C++函数:test.pyfromctypesimport*fromrandomimportrandinttester=cdll.LoadLibrary('./test.dll')print(tester.test(randint(1,100)))test.cpp#include<vector>intcppTest(intnum){std:......
  • Python 的分布式锁管理器
    我有一堆具有多个实例的服务器,这些实例访问的资源对每秒的请求有硬性限制。我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问。有我在github上找到的一个restful分布式锁管理器:https://github.com/thefab/restful-distributed-lock-manager不幸......
  • 如何在Python中提示self变量的类型
    通常不需要关心Python类成员函数中的self变量,但我正在实现一个装饰器,看起来像defextractor(depends:List[Text]=None,provides:List[Text]=None)->Callable[[ExtractorFunction],Extracto......
  • 将 Python 类型提示限制为元组中的值
    我的方法之一采用status中使用的filter()参数。此参数与定义如下的模型字段相关:STATUS_CHOICES=((1,_("draft")),(2,_("private")),(3,_("published")),)classMyModel(Model):status=models.PositiveSmallIntegerFi......
  • 在python中查找区间数据的中位数
    我正在探索不同的python库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。年龄频率1-1012310-203502......
  • 比较Python中的字符串统一特殊字符
    也许我可以使用更好的英语,但我想要的是忽略单词中的重音(和类似的),所以:renè、rené、rene'和rene应该是相同的,所以应该mañana和manana或even-distribuited和evendistribuited,可能还有sho......
  • 如何使用 Python 脚本从客户账单电子邮件中获取订单 ID - WooCommerce API
    我想创建一个python脚本,返回只知道客户的账单电子邮件的订单。我尝试这样做,但返回所有最近的订单:fromwoocommerceimportAPIwcapi=API(url="https://siteexample.com",consumer_key="ck_xxx",consumer_secret="cs_xxx",version="wc/v3")......
  • python基础理论小总结
    1.python语言的特性Python是一门解释型语言,简单清晰,开源免费,跨平台,有大量第三方库辅助开发,支持面向对象与自动垃圾回收,方便与其他编程语言相互调用。Python在数据采集、人工智能、WEB后台开发、自动化运维、测试等方向应用广泛。2.解释型语言和编译型语言的区别执行方式不......
  • python编码规范
    本篇讲的是代码格式化的问题,解决格式化的方法在最下方,不想看内容的,滑到最下方就好了。一、变量的命名规则1.组成:字母、数字、下划线2.不可以以数字开头3.不建议使用下划线开头4.命名需见名知意5.不要与关键字重名。如何查找所有关键字?importkeywordprint(keyword.k......
  • Python爬虫开发中的常用库与框架安装指南
    在Python爬虫开发中,选择合适的库和框架可以大大提高开发效率和爬虫的性能。本文将介绍一些常用的解析库、请求库、储存库、Web库、App爬取库以及爬虫框架,并展示如何使用pip命令进行安装。一、解析库1.BeautifulSoupBeautifulSoup是一个用于从HTML或XML文件中提取数据的Pyth......