(PyQt) QVBoxLayout уменьшается при многократной загрузке addWidget

Почему макет сжимается, как это, и другие времена возвращаются к нормальной жизни?

введите описание изображения здесь

Я создал несколько отдельных файлов пользовательского интерфейса в QtDesigner, один - MainWindow, а другой - виджет для загрузки данных.

Для работы с этими файлами я создал отдельные дочерние классы для каждого файла пользовательского интерфейса. Чтобы добавить новый виджет в MainWindow, я создал addWidget() функция; это работает, добавляя определенный виджет к макету scrollarea. Вы можете увидеть эту функцию в MainWindow.py


Вот код для __main__.py

import multiprocessing as mp
import os.path
import sys
import time

from PyQt5 import QtGui
from PyQt5 import QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *

from point_spectra_gui.future_.functions import *
from point_spectra_gui.future_.util import delete
from point_spectra_gui.future_.util.excepthook import my_exception_hook


def new():
    p = mp.Process(target=main, args=())
    p.start()


def connectWidgets(ui):
    ui.actionLoad_Data.triggered.connect(lambda: ui.addWidget(LoadData.Ui_Form))


def main():
    sys._excepthook = sys.excepthook
    sys.excepthook = my_exception_hook

    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = MainWindow.Ui_MainWindow()
    ui.setupUi(mainWindow)
    connectWidgets(ui)
    mainWindow.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()


Вот код для MainWindow.py

from PyQt5 import QtWidgets

from point_spectra_gui.future_.functions import *
from point_spectra_gui.future_.util import *
from point_spectra_gui.ui import MainWindow


class Ui_MainWindow(MainWindow.Ui_MainWindow):
    def setupUi(self, MainWindow):
        self.MainWindow = MainWindow
        super().setupUi(MainWindow)  # Run the basic window UI
        self.menu_item_shortcuts()  # set up the shortcuts

    def addWidget(self, object):
        widget = object()
        widget.setupUi(self.scrollArea)
        self.widgetLayout = QtWidgets.QVBoxLayout()
        self.widgetLayout.setObjectName("widgetLayout")
        self.verticalLayout_3.addLayout(self.widgetLayout)
        self.widgetLayout.addWidget(widget.get_widget())

    def menu_item_shortcuts(self):
        self.actionExit.setShortcut("ctrl+Q")
        self.actionCreate_New_Workflow.setShortcut("ctrl+N")
        self.actionOpen_Workflow.setShortcut("ctrl+O")
        self.actionRestore_Workflow.setShortcut("ctrl+R")
        self.actionSave_Current_Workflow.setShortcut("ctrl+S")


Вот код дочернего класса LoadData.py

from PyQt5 import QtWidgets

from point_spectra_gui.ui.LoadData import Ui_loadData


class Ui_Form(Ui_loadData):
    def setupUi(self, Form):
        super().setupUi(Form)
        self.connectWidgets()

    def get_widget(self):
        return self.groupBox

    def connectWidgets(self):
        self.newFilePushButton.clicked.connect(lambda: self.on_getDataButton_clicked())
        # self.get_data_line_edit.textChanged.connect(lambda: self.get_data_params())
        # self.dataname.textChanged.connect(lambda: self.get_data_params())

    def on_getDataButton_clicked(self):
        filename, _filter = QtWidgets.QFileDialog.getOpenFileName(None, "Open Data File", '.', "(*.csv)")
        self.fileNameLineEdit.setText(filename)
        if self.fileNameLineEdit.text() == "":
            self.fileNameLineEdit.setText("*.csv")


**Редактировать

Попробовав это снова, а затем уменьшив окно. Макет возвращается к нормальной жизни. Для меня это говорит мне, что это не проблема с моим кодом, это то, как Qt обрабатывает добавление виджетов. Я до сих пор не понимаю, почему это происходит, хотя. Поэтому любое понимание того, как это происходит, очень ценится.

введите описание изображения здесь

1 ответ

Решение

Эта проблема с Form.resize() внутри сгенерированного кода.

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)

Чтобы это исправить, вам нужно зайти в QtDesigner и установить геометрию обратно в размер по умолчанию, щелкнув по пунктирному красному элементу.

Это, по сути, удаляет resize вызов метода

нажмите на где красный круг

Затем вы можете снова конвертировать с помощью Pyuic

Другие вопросы по тегам