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)
我正在构建一种 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)