[英]PyQt5 listWidget refuse to get smaller in QtDesigner
我在设计器中有一个如下所示的布局:
除了我希望 listWidget 尽可能小,并且仅根据容纳所有项目所需的最小高度垂直扩展。 但是由于某种原因,它拒绝合作,只是保持默认大小。 我试图做很多事情来改变它:
但这些都不起作用。 此外,尽管没有为任何东西设置最小尺寸,但 window 似乎无法变得比这更小,这让我相信 listWidget 有一个不可见的最小尺寸,它与显示的最小尺寸无关属性。 任何人都知道如何解决这个问题?
编辑:在建议使用首选尺寸策略和扩展按钮后,它仍然不想工作。 这是供参考的ui文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>318</width>
<height>277</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
<property name="spacing">
<number>0</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="resizeMode">
<enum>QListView::Fixed</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
将拉伸因子设置为默认值,然后
QListWidget
将垂直大小策略设置为Preferred
QPushButton
垂直尺寸策略设置为Expanding
QLabel
垂直大小策略设置为Maximum
QListWidget
的 sizeAdjuctPolicy 设置为AdjustToContents
qt 中的大小策略与乍一看不同。 Minimum
实际上意味着尽可能多地增长。 Maximum
实际上意味着尽可能地缩小。 您可以在Qt 文档中了解有关它们的更多信息
您可以做的最后一部分是覆盖 QListWidget.sizeHint 方法以动态调整列表中的项目数。
这是一个可运行的示例:
from PySide6.QtCore import *
from PySide6.QtWidgets import *
class ListWidget(QListWidget):
def sizeHint(self):
size = super().sizeHint()
frame = self.frameWidth() * 2
items_height = self.count() * self.sizeHintForRow(0)
height = min(super().maximumHeight(), items_height)
size.setHeight(height + frame)
return size
def minimumSizeHint(self):
return self.sizeHint()
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.resize(318, 277)
self.centralwidget = QWidget(self)
self.verticalLayout = QVBoxLayout(self.centralwidget)
sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
sizePolicy2 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Maximum)
self.setCentralWidget(self.centralwidget)
self.label = QLabel('Label', self.centralwidget)
self.listWidget = ListWidget(self.centralwidget)
self.pushButton = QPushButton('Push Button', self.centralwidget)
self.label.setSizePolicy(sizePolicy2)
self.listWidget.setSizePolicy(sizePolicy)
self.listWidget.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents)
self.pushButton.setSizePolicy(sizePolicy1)
self.verticalLayout.addWidget(self.label)
self.verticalLayout.addWidget(self.listWidget)
self.verticalLayout.addWidget(self.pushButton)
self.pushButton.clicked.connect(self.additem)
def additem(self):
i = self.listWidget.count()
self.listWidget.addItem(QListWidgetItem("Item" + str(i), type=0))
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.