PyQt5 QWidget将固定宽度设置为最小可用大小

3

我有一个布局,在其中添加了很多小部件(目前是QPushButton,但可以是任何QWidget元素),默认情况下它们在添加时会填充整个宽度。由于我的自定义大小处理是根据这些宽度移动元素的,它们会将每个元素注册为与布局相同的大小,即使在我调整大小后它们变得更小,我的函数仍然会将它们移动。

因此,当我添加一个小部件时,有没有办法将其缩小到最小尺寸以容纳内容?大致如下:

item = QPushButton("somestuff") # | QLabel | QWidget | etc
item.setFixedWidth(item.contents.size().width())
1个回答

3

要计算最小宽度,您可以使用QFontMetrics

item = QPushButton("somestuff") # | QLabel | QWidget | etc
fm = QFontMetrics(item.font())
item.setFixedWidth(fm.width(item.text()))

那不起作用。我收到了错误消息: print(QFontMetrics(item.font()).width()) TypeError: width(self, str, length: int = -1): not enough arguments - Drew
可以,那有没有办法包括原来的边距,这样就可以调整到文本的像素边缘了? - Drew
边距是什么意思,也许你可以使用以下代码:item.setFixedWidth(fm.width(" " + item.text()+" ")) 或者 item.setFixedWidth(fm.width(item.text())+2) - eyllanesc
是的,本质上如此。通过加倍宽度,按钮和复选框看起来很好,这是它们的主要元素。 - Drew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接