QtFormLayout не выравнивается при удалении строки - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок в PyQt5 и у меня есть базовый c вопрос, который я не смог решить. Я использую Pyqt Designer для организации макета и виджетов.

Я пытаюсь создать такую ​​форму (пробел между Label и LineEdit):

enter image description here

Но каждый раз, когда я удаляю первую строку, она остается такой:

enter image description here

Я не понимаю, почему это происходит. Первый ряд («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

Ps: Я использую Python 3.8.2 и PyQt5 5.13.2

Спасибо за внимание!

...