Как отключить растягивание виджетов в PyQt6?
Я хочу, чтобы при изменении размера окна виджет QSpinBox не растягивался по горизонтали.
Я пытался использовать QtWidgets.QSizePolicy, но не нашёл достаточно информации по этому поводу.
Решить это через setFixedSize() не получается, т. к. если получить значение размера окна self.size(), то передаётся значение больше, чем на самом деле
Возможно требуется что-то из настроек самого QVBoxLayout
import sys
from PyQt6.QtWidgets import QApplication, QCheckBox, QWidget, QLabel, QVBoxLayout, QSpinBox
class App(QWidget):
def __init__(self):
super().__init__()
self.chkbx = QCheckBox('Чекбокс')
self.text = QLabel('Текст')
self.numb = QSpinBox()
layout = QVBoxLayout()
layout.totalSizeHint()
layout.addWidget(self.chkbx)
layout.addWidget(self.text)
layout.addWidget(self.numb)
self.setLayout(layout)
app = QApplication(sys.argv)
window = App()
window.show()
app.exec()
Ответы (2 шт):
Я не совсем понимаю почему вас не устраивает:
void QWidget::setFixedWidth(int
w)Устанавливает минимальную и максимальную ширину виджета в
wбез изменения высоты.
import sys
'''
from PyQt6.QtWidgets import QApplication, QCheckBox, QWidget, \
QLabel, QVBoxLayout, QSpinBox
'''
from PyQt5.QtWidgets import QApplication, QCheckBox, QWidget, \
QLabel, QVBoxLayout, QSpinBox
class App(QWidget):
def __init__(self):
super().__init__()
self.chkbx = QCheckBox('Чекбокс')
self.text = QLabel('Текст')
self.numb = QSpinBox()
self.numb.setFixedWidth(35) # <----
layout = QVBoxLayout()
# ??? layout.totalSizeHint()
layout.addWidget(self.chkbx)
layout.addWidget(self.text)
layout.addWidget(self.numb)
self.setLayout(layout)
app = QApplication(sys.argv)
window = App()
window.show()
app.exec()
Для того, чтобы заблокировать QLayout, нужно воспользоваться методом .setSizeConstraint(QLayout.SizeConstraint.SetFixedSize)
А если нужно заблокировать отдельный виджет, то нужно использовать метод .setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed), где первый аргумент в .setSizePolicy отвечает за изменения по горизонтали, а второй - по вертикали.
