Как удалить QVBoxLayout из QWidget или преобразовать его в QGridLayout? - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь внести некоторые изменения в графический интерфейс. Мой графический интерфейс построен на QWidget. Первоначально у меня был только QPushButton в QWidget, который затем был удален и заменен на QGridlayout, содержащий кучу других вещей. Теперь я хочу, чтобы в QVBoxLayout изначально были две кнопки, которые удаляются, а QVBoxLayout удаляется и / или заменяется QGridLayout, в котором затем размещаются следующие элементы.

Проблема: я не могу удалить и / или заменить QVBosLayout на QGridLayout.

Минимальный воспроизводимый пример ниже. Вам нужен PyQt5 для запуска

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form():

    def __init__(self):
        self.nCode_analysis_set_up = QtWidgets.QWidget()
        self.nCode_analysis_set_up.resize(300, 100)
        self.nCode_analysis_set_up.setWindowFlags(self.nCode_analysis_set_up.windowFlags() | QtCore.Qt.MSWindowsFixedSizeDialogHint)
        self.nCode_analysis_set_up.setWindowTitle("nCode analysis set-up")
        self.Box = QtWidgets.QVBoxLayout(self.nCode_analysis_set_up)
        self.importButton = QtWidgets.QPushButton(self.nCode_analysis_set_up)
        self.importButton.setText("Open import model")
        self.importButton.clicked.connect(self.input_model)
        self.Box.addWidget(self.importButton)

    def input_model(self):
        self.importButton.deleteLater()
        self.Box.deleteLater()
        self.Box = QtWidgets.QGridLayout(self.nCode_analysis_set_up)
        self.analysis_type_label = QtWidgets.QLabel(self.nCode_analysis_set_up)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = Ui_Form()
    ui.nCode_analysis_set_up.show()
    sys.exit(app.exec_())

1 Ответ

1 голос
/ 12 июня 2019

Не удаляйте виджеты, поскольку это обычно приносит больше проблем, чем преимуществ, вместо этого используйте QStackWidget или QStackedLayout:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form:
    def __init__(self):
        self.nCode_analysis_set_up = QtWidgets.QWidget()
        self.nCode_analysis_set_up.resize(300, 100)
        self.nCode_analysis_set_up.setWindowFlags(
            self.nCode_analysis_set_up.windowFlags()
            | QtCore.Qt.MSWindowsFixedSizeDialogHint
        )
        self.nCode_analysis_set_up.setWindowTitle("nCode analysis set-up")

        self.stacked = QtWidgets.QStackedLayout(self.nCode_analysis_set_up)

        widget1 = QtWidgets.QWidget()
        box_1 = QtWidgets.QVBoxLayout(widget1)
        self.importButton = QtWidgets.QPushButton()
        self.importButton.setText("Open import model")
        self.importButton.clicked.connect(self.input_model)
        box_1.addWidget(self.importButton)

        widget2 = QtWidgets.QWidget()
        box_2 = QtWidgets.QGridLayout(widget2)
        self.analysis_type_label = QtWidgets.QLabel()
        self.analysis_type_label.setText("Label")
        box_2.addWidget(self.analysis_type_label)

        self.stacked.addWidget(widget1)
        self.stacked.addWidget(widget2)

    def input_model(self):
        self.stacked.setCurrentIndex(1)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    ui = Ui_Form()
    ui.nCode_analysis_set_up.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...