python - 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 等),但我想我错过了一些东西。
我已经花了两个晚上,我一无所知......
额外问题:我的右下框的矩形没有与我的代码一起显示。我想这可能是利润的问题,但还不能弄清楚。
解决方案
好吧,对于任何在未来寻找它的人。感谢 musicamente 的评论,我找到了它:
重新实现 sizeHint 方法:
def sizeHint(self):
return QSize(50, 50)
推荐阅读
- r - 如何将这样的值转换为 R 中的日期类型?
- c++ - 链表 - 获取临时地址的问题
- javascript - 为什么 postMessage() 只给我来自最后一个 DOM 的信息?
- symfony - Symfony 为注销路由添加逻辑
- python - 如何将字符串添加到字符串列表的末尾
- javascript - 如何在模板字符串中使用 v-if?
- android-studio - 使用 Flutter 在 Android Studio 中热重载与热重启
- flutter - Flutter:如何向 CupertinoPicker 添加新项目
- apache-kafka - Kafka 不适用于外部 NFS 卷
- python - 在 Python 中将对象添加到列表中