gpt4 book ai didi

python - 如何从 QWidget 中删除 QVBoxLayout 或将其转换为 QGridLayout?

转载 作者:行者123 更新时间:2023-12-01 07:43:55 27 4
gpt4 key购买 nike

我正在尝试对 GUI 进行一些修改。我的 GUI 是基于 QWidget 构建的。最初,我在 QWidget 中只有一个 QPushButton,然后它被删除,并被包含一堆其他东西的 QGridlayout 所取代。现在我想最初在 QVBoxLayout 中保留两个按钮,将其删除,然后将 QVBoxLayout 删除和/或替换为 QGridLayout,然后将其替换为下一个项目。

问题:我无法删除 QVBosLayout 和/或用 QGridLayout 替换 QVBosLayout。

下面是最小的可重现示例。您需要 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_())

最佳答案

不要删除小部件,因为它通常带来的问题多于好处,而是使用 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_())

关于python - 如何从 QWidget 中删除 QVBoxLayout 或将其转换为 QGridLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56559322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com