Растяжение виджетов, находящихся в QGridLayout, вместе с растяжением окна QDialog
Каким образом виджеты внутри QGridLayout будут растягиваться вместе с окном, когда я его растягиваю мышкой?
Пробовал установить setSizePolicy для каждого отдельного элемента, на что элемент просто распирало в рамках, которые установлены в Qt Designer элементом QGridLayout.
class Ui_Form(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(650, 420)
Dialog.setMinimumSize(650,420)
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 20, 630, 390))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize)
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setHorizontalSpacing(0)
self.gridLayout.setVerticalSpacing(8)
self.gridLayout.setObjectName("gridLayout")
self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 0, 2, 1, 1)
Ответы (2 шт):
Автор решения: Валера Римский
→ Ссылка
Решил тем что переписал ui на QMainWindow и добавил gridLayout как centralWidget Окно при растяжении стало показывать все растягивающиеся элементы
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5 import QtWidgets, QtGui, QtCore, uic
class Ui_Form(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(650, 420)
# Dialog.setMinimumSize(650,420)
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 20, 630, 390))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
# self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
# --------------------------------------------> vvvvvv <---------------------------
self.gridLayout = QtWidgets.QGridLayout(Dialog) # !!! +++
self.layout = QtWidgets.QGridLayout(self.gridLayoutWidget) # !!! +++
# ??? self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize)
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setHorizontalSpacing(0)
self.gridLayout.setVerticalSpacing(8)
self.gridLayout.setObjectName("gridLayout")
self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
self.label_4.setObjectName("label_4")
self.label_4.setAlignment(QtCore.Qt.AlignCenter) # +++
self.label_4.setWordWrap(True) # +++
# self.gridLayout.addWidget(self.label_4, 0, 2, 1, 1)
self.layout.addWidget(self.label_4, 0, 2, 1, 1) # +++
self.gridLayout.addWidget(self.gridLayoutWidget, 0, 2, 1, 1) # +++
class MainWindow(QtWidgets.QDialog, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setStyleSheet("background-color: #ff5555")
self.gridLayoutWidget.setStyleSheet("background-color: #0097ff")
self.label_4.setStyleSheet("background-color: #609772")
self.label_4.setText('1234567 2342344234 2234 234')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Times", 15))
w = MainWindow()
w.show()
sys.exit(app.exec_())


