pyqt6的uic调用ui 父窗口widget的布局未生效



import sys
from qtpy.QtWidgets import QApplication, QMainWindow
from qtpy import uic
from qtpy.QtNetwork import QTcpServer

Ui_MainWindow, _ = uic.loadUiType("form.ui")

class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        Ui_MainWindow.__init__(self)
        self.setupUi(self)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())


代码是这个样子的 ui布局是

img


实际应用是

img

不清楚问题出在哪里 第一次使用qtpy 一定要通过代码实现布局吗
求解答

  • 文章:PyQt5 设置QWidget窗口背景图片问题 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: 【PyQT5 最全学习笔记】:第二节 QWidget类 窗口创建、大小设置及内容边距等API及用法实例中的 2.4 实例二:创建具有规则排列的多个子控件窗口 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 要求:

    1、创建一个窗口, 设置尺寸为500 x 500, 位置为 300, 300
    2、通过给定的的个数, 在该窗口内创建相应个数的子控件
    3、 给定一列子控件的个数,让所有子控件在窗口均匀排列
    4、假设有50个子控件,一列排4个

    代码:

    window2 = QWidget()
    window2.resize(500, 500)
    window2.move(300, 300)
    # 先让父窗口显示,这样计算出来的width 和 height才准确
    window2.show()
    
    # 总的控件个数
    widget_count = 50
    # 一行有多少列
    column_count = 4
    
    # 计算一个控件的宽度
    widget_width = window2.width() / column_count
    # 总共有多少行 (编号 // 一行多少列 + 1)
    row_count = (widget_count -1) // column_count + 1
    # 计算一个控件的高度
    widget_height = window2.height() / row_count
    
    # 创建控件,并设置每个控件的位置
    for i in range(0, widget_count):
        w = QWidget(window2)
        # 设置子控件大小
        w.resize(widget_width, widget_height)
        # 设置子控件坐标
        widget_x = i % column_count * widget_width
        widget_y = i // column_count * widget_height
        w.move(widget_x, widget_y)
        # 设定子控件背景颜色及边框颜色
        w.setStyleSheet("background-color: red;border: 1px solid yellow;")
        # 显示子控件,因父控件已显示(已绘制),如不手动设置子控件显示,将看不到子控件
        w.show()
    

    解析:
    1、这里注意父窗口的show()方法使用的位置及让每个子控件再调用show()方法的意义。
    2、注意子控件需排列的行数计算方法。

    效果图:

    在这里插入图片描述

  • 您还可以看一下 闫鄂生老师的Python UI编程PyQt程序设计课程中的 QWidget类小节, 巩固相关知识点