Найти - Пользователи
Полная версия: PyQt5 Фиксированный размер окна и QGridLayout
Начало » GUI » PyQt5 Фиксированный размер окна и QGridLayout
1 2 3
gmaksim
Как можно осуществить следующее:
Задать фиксированный размер окна (черный контур) и при этом в рамках него задать QGridLayout другого фиксированного размера (фиолетовый контур)?

Для чего:
От действия к действию необходимо свое количество виджетов на форме, и при использовании QGridLayout в некоторых случаях все сильно “размазывается”по окну", что не удобно для использования. Возможно есть варианты проще о которых я не знаю.

setFixedSize в QGridLayout изначально задает границы, выходит надо как-то инициализировать его внутри другого окна (черный контур большего размера, в моем случае)?
Kyrym
На сколько я знаю, для QGridLayout нельзя задать фиксированные размеры элементов.
Я так понимаю, Вам нужно, чтобы левый бокс с кнопками не растягивался сильно.Это вполне можно осуществить.
Основная схема такая. Делаете основной Grid 1, состоящий из, скажем, 5-ти столбцов. В первый вставите вертикальный бокс с кнопками, остальные четыре можете объединить, а потом в них засунете другой Grid 2(ну тут, как Вам удобно). А теперь главная фишка:
 self.grid1.setColumnStretch(1,5)
В скобках первая цифра - номер столбца ( в нашем случае - второй столбец), вторая цифра степень растяжения. По умолчанию растяжение 0. Т.о. первый столбец, возможно, и не будет растягиваться совсем.
gmaksim
Мне нужно, чтобы окно было всегда одно размера.
А при смене функции к функции (в каждой свой GUI) - элементы могли размещаться внутри этого окна не растягиваясь по нему, а так, как будет указано (например - функция один 2 на 2 в окне 5 на 5, следующая функция 3 на 4 в окне 5 на 5).
Как-то так.

Ваш вариант, к сожалению, никак не получается применить (или не понимаю как).
gmaksim
В текущем реализованном варианте, если задать
         self.layout = QGridLayout()
         self.setLayout(self.layout)
         self.setGeometry(100, 100, 800, 800)
800 на 800, то все последующие элементы (если всего, скажем, это одно поле ввода и одна кнопка сохранения) растянутся на эти самые 800 на 800, а надо, чтобы они были примерно как на 2.png.
Kyrym
Действительно, я Вас совершенно не так понял.
Писать код мне некогда, но можете попробовать такой вариант.
Допустим, у вас три модуля (назовём их GUI 1, 2, 3). Их Вам надо вставить в GUI 0 с размерами, которые прописаны во вставляемых файлах. Эти размеры запишите в переменные, будете их извлекать из главной оболочки в функциях один, два и т.д.
В главном файле создайте grid с двумя полями. В левый будете вставлять оболочку из модуля, а в правый вставлять пустой label.
В функции вставляющие модули пропишите:
 self.grid.setColumnMinimumWidth(1,X)
где X - это разность ширины Вашего чёрной рамки и ширины вставляемой оболочки (которую вы извлечёте из модуля).
Rodegast
Открой для себя распорку и не мучайся.
gmaksim
Kyrym
Попробую, если нет других способов. Неужели все так решают этот вопрос (или я не так подхожу к этой задаче)?

Rodegast
QTroll.setRasporka? Можно подробнее, пожалуйста?
Rodegast
Они в дизайнере с левой стороны, ниже компоновщиков.
gmaksim
Rodegast
https://www.qt.io/
?
Rodegast
С тобой всё понятно. Мучайся дальше.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB