首页 > 解决方案 > QGridLayout 中 QWidget 的初始大小

问题描述

我正在使用 QGridLayout 和一定数量的 Box 对象构建一种表格:

表格图片:
在此处输入图像描述

class Mybox(QWidget):
def __init__(self, i, *args, **kwargs):
    super(Mybox, self).__init__(*args, **kwargs)

    self.text = i

def paintEvent(self, event):
    painter = QPainter(self)

    # Rect info of the box
    rect = event.rect()

    # Draw perimeter of the box
    pen = QPen()
    pen.setWidth(1)
    painter.setPen(pen)
    painter.drawRect(rect)

    # Index of box
    painter.setFont(QFont('Arial', 9))
    painter.drawText(rect, Qt.AlignHCenter | Qt.AlignVCenter, str(self.text))


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        w = QWidget()

        self.grid = QGridLayout()
        self.grid.setSpacing(0)

        w.setLayout(self.grid)

        self.init_boxes()
        self.setCentralWidget(w)

        self.show()

    def init_boxes(self):
        i = 1
        for x in range(2):
            for y in range(2):
                print(i)
                w = Mybox(i)
                self.grid.addWidget(w, x, y)
                i += 1

我的问题是我发现无法根据框的初始大小设置表格的初始大小。

对盒子使用 setMinimumSize 可用于最小尺寸行为。但我想用中间大小初始化表,以便可以将大小调整到 MyBox 对象的最小限制或最大限制。

我已经尝试了几乎所有的东西(basesize、resize、sizehint 等),但我想我错过了一些东西。

我已经花了两个晚上,我一无所知......

额外问题:我的右下框的矩形没有与我的代码一起显示。我想这可能是利润的问题,但还不能弄清楚。

标签: pythonpyqtpyqt5

解决方案


好吧,对于任何在未来寻找它的人。感谢 musicamente 的评论,我找到了它:

重新实现 sizeHint 方法:

    def sizeHint(self):
        return QSize(50, 50)

推荐阅读