@kapit

Почему появляется сбой разметки и как исправить?

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.Qt import *
import sys, os

class tagsGUI(object):
	def __init__(self):
		super(tagsGUI, self).__init__()
		self.title = 'tags'
		self.size = (850, 500, 25)
		self.start_win()

	def start_win(self):
		self.app = QtWidgets.QApplication(sys.argv)
		self.des = self.app.desktop().screenGeometry()
		self.win = QtWidgets.QWidget()
		self.win.setWindowTitle(self.title)
		self.win.setMinimumSize(self.size[0], self.size[1])
		self.win.move((self.des.width() - self.size[0]) // 2, self.size[2])

		self.pelt_window_box = QtWidgets.QVBoxLayout()
		self.pelt_window_box.setContentsMargins(0, 0, 0, -2)
		self.building_tags_window()
		self.win.setLayout(self.pelt_window_box)
		self.win.show()
		sys.exit(self.app.exec_())

	def building_tags_window(self):
		self.TAGS_WIDGET = dict()

		list_tags = list()
		for _ in range(20):list_tags.append(['2018_11.31.', 'тег', '#000000', 'описание'])
    	
		self.TAGS_WIDGET['layout_box'] = QtWidgets.QVBoxLayout()
		for i, tag in zip(range(len(list_tags)), list_tags):
			str_tags = 'str_tag_{}'.format(i)
			date = 'date_{}'.format(i)
			name_tag = 'name_tag_{}'.format(i)
			color_tag = 'color_tag_{}'.format(i)
			descrip = 'description_{}'.format(i)

			self.TAGS_WIDGET[str_tags] = QtWidgets.QHBoxLayout()
			self.TAGS_WIDGET[date] = QtWidgets.QLabel(tag[0])
			self.TAGS_WIDGET[name_tag] = QtWidgets.QLineEdit(tag[1])
			self.TAGS_WIDGET[color_tag] = QtWidgets.QLineEdit(tag[2])
			self.TAGS_WIDGET[descrip] = QtWidgets.QTextEdit(tag[3])

			self.TAGS_WIDGET[str_tags].addStretch(5)
			self.TAGS_WIDGET[str_tags].addWidget(self.TAGS_WIDGET[date], 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
			self.TAGS_WIDGET[str_tags].addWidget(self.TAGS_WIDGET[name_tag], 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
			self.TAGS_WIDGET[str_tags].addWidget(self.TAGS_WIDGET[color_tag], 0, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
			self.TAGS_WIDGET[str_tags].addWidget(self.TAGS_WIDGET[descrip], 100, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
			self.TAGS_WIDGET[str_tags].addStretch(5)
			self.TAGS_WIDGET['layout_box'].addLayout(self.TAGS_WIDGET[str_tags])
		
		self.TAGS_WIDGET['widget'] = QtWidgets.QWidget()
		self.TAGS_WIDGET['widget'].setLayout(self.TAGS_WIDGET['layout_box'])

		self.TAGS_WIDGET['scroll_area'] = QtWidgets.QScrollArea()
		self.TAGS_WIDGET['scroll_area'].setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
		self.TAGS_WIDGET['scroll_area'].setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.TAGS_WIDGET['scroll_area'].setWidget(self.TAGS_WIDGET['widget'])

		self.pelt_window_box.addWidget(self.TAGS_WIDGET['scroll_area'])

if __name__ == '__main__':
	tagsGUI()

5ba8107164279591454774.png

Исполняя код получаю то, что на картинке и это несколько не то, что я планирую увидеть. По моим ожиданиям QTextEdit должен растянутся вплоть до scrollbar и а все содержимое layout_box должно центрироваться по центру экрана за счет двух addStretch. Между тем все содержимое проигнорировав указания, утыкается и скукоживается в левый угол.
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@bbkmzzzz
Вам нужно разрешить изменение размеров элементов внутри scrollArea
self.TAGS_WIDGET['scroll_area'].setWidgetResizable(True)

Тогда тоже поплывет, но настраивать нужно будет уже сами компоновщики

UPD
Уберите выравнивания у self.TAGS_WIDGET[descrip], он перемещает виджет к краю ячейки компоновщика и использует минимальные размеры виджета
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы