Я новичок в PyQt5 и у меня есть базовый c вопрос, который я не смог решить. Я использую Pyqt Designer для организации макета и виджетов.
Я пытаюсь создать такую форму (пробел между Label и LineEdit):
![enter image description here](https://i.stack.imgur.com/5XNqi.png)
Но каждый раз, когда я удаляю первую строку, она остается такой:
![enter image description here](https://i.stack.imgur.com/yG0xF.png)
Я не понимаю, почему это происходит. Первый ряд («TextLabel») я создал с помощью дизайнера и изменил только MaximumWidth и MinimumWidth для текста надписи и LineEdit.
Я сделал то же самое в коде. Я только изменил MaximumWidth и MinimumWidth для каждого компонента в строке.
EDIT: Вот лучший и рабочий тестовый код с файлом пользовательского интерфейса:
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtGui import QIcon, QDoubleValidator
from PyQt5.QtWidgets import QPushButton, QFileDialog, QLabel, QMessageBox, QTextBrowser, QButtonGroup, QFormLayout, QLineEdit, QSizePolicy, QSpacerItem
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyWindow,self).__init__()
self.setFixedSize(800, 600)
self.window_title="GALIA"
self.unitCell_ui()
#SCREEN
def unitCell_ui (self):
uic.loadUi('interface.ui',self)
self.setWindowTitle(self.window_title)
variable_names=["test1","test2"]
self.create_form(variable_names)
self.clear_layout(self.formLayout_output)
self.create_form(variable_names)
#FUNCTIONS
def clear_layout(self, layout):
for i in reversed(range(layout.count())):
widgetToRemove = layout.itemAt(i).widget()
# remove it from the layout list
layout.removeWidget(widgetToRemove)
# remove it from the gui
widgetToRemove.setParent(None)
def create_form(self, variable_names: list):
self.lineEdit_out_objs = [QLineEdit() for i in range( (len(variable_names) ) )]
self.label_out_objs = [QLineEdit() for i in range( (len(variable_names) ) )]
print(self.label_outTemplate.minimumWidth())
for i in range(len(variable_names)):
self.formLayout_output.addRow(variable_names[i], self.lineEdit_out_objs[i])
#config Labels proprieties here:
self.label_out_objs[i].setMinimumWidth(self.label_outTemplate.minimumWidth())
self.label_out_objs[i].setMaximumWidth(self.label_outTemplate.maximumWidth())
self.label_out_objs[i].setFixedSize(QtCore.QSize(200, 25))
#config LineEdit proprieties here:
self.lineEdit_out_objs[i].setMinimumWidth(self.lineEdit_outTemplate.minimumWidth())
self.lineEdit_out_objs[i].setMaximumWidth(self.lineEdit_outTemplate.maximumWidth())
new_height = self.scrollArea_output.viewportSizeHint().height()
self.scrollArea_output.resize(370,new_height+2)
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
app.exec()
Вот интерфейс ". ui "файл, созданный в QT Designer:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<stylestrategy>PreferDefault</stylestrategy>
</font>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QScrollArea" name="scrollArea">
<property name="geometry">
<rect>
<x>0</x>
<y>50</y>
<width>801</width>
<height>511</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>799</width>
<height>509</height>
</rect>
</property>
<widget class="QScrollArea" name="scrollArea_output">
<property name="geometry">
<rect>
<x>200</x>
<y>40</y>
<width>370</width>
<height>76</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="formLayout_area_out">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>351</width>
<height>74</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_out">
<property name="topMargin">
<number>9</number>
</property>
<item>
<layout class="QFormLayout" name="formLayout_output">
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="horizontalSpacing">
<number>6</number>
</property>
<property name="verticalSpacing">
<number>6</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 row="0" column="0">
<widget class="QLabel" name="label_outTemplate">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="text">
<string>TextLabel:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_outTemplate">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>125</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>125</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</widget>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
А вот конфигурация макета в Qt Desginer:
![enter image description here](https://i.stack.imgur.com/WvCum.png)
Ps: Я использую Python 3.8.2 и PyQt5 5.13.2
Спасибо за внимание!