QGridLayout 中 QWidget 的初始大小

Initial size of a QWidget in a QGridLayout

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

table 的图像:

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

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

对框使用 setMinimumSize 适用于最小尺寸行为。 但是我想用中间大小初始化 table ,这样就可以将大小调整到 MyBox 对象的最小限制或最大限制。

我几乎尝试了所有方法(basesize、resize、sizehint 等),但我想我遗漏了一些东西。

我花了两个晚上的时间,我一无所知...

奖金问题: 我的右侧和下方框的矩形没有显示我的代码。 我猜这可能是边距的问题,但还没有弄明白。

好的,供以后寻找它的任何人使用。 感谢 musicamente 评论,我找到了它:

重新实现 sizeHint 方法:

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