pyqt5使用clicked.connect加载小部件是否有限制?

问题描述 投票:0回答:1

我正在使用QPushButton来加载UI。 First -> Jumin -> Department -> next -> next我想按顺序创建UI。问题是我无法将第三个部门加载到QMainwindow窗口中。我不知道为什么

当您在QVBoxLayout中创建窗口小部件时,它会根据像wxpython layout (wx.all)这样的壁纸更改窗口小部件的大小。无法通过自动居中改变position (move)size (resize)

import sys
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.center_widget = QWidget()
        self.setCentralWidget(self.center_widget)
        self.FirstUI()

    def FirstUI(self):
        self.btn1 = QPushButton('test1', self)
        self.btn1.move(50, 50)
        self.btn1.clicked.connect(self.btn1_click)

    def JuminUI(self):
        self.ju1 = QLineEdit('13')
        self.btn2 = QPushButton('^^^^^^^^^^')
        self.ju_text = QLabel('asd')
        self.jumim_layout = QVBoxLayout()
        self.jumim_layout.addWidget(self.ju_text)
        self.jumim_layout.addWidget(self.ju1)
        self.jumim_layout.addWidget(self.btn2)
        self.centralWidget().setLayout(self.jumim_layout)
        self.btn2.clicked.connect(self.btn2_click)

    def DepartmentUI(self):
        self.depart_layout = QVBoxLayout()
        self.depart_layout.addWidget(QPushButton('sdfsdf'))
        self.centralWidget().setLayout(self.depart_layout)

    def btn1_click(self):
        self.btn1.deleteLater()
        self.JuminUI()

    def btn2_click(self):
        self.ju1.deleteLater()
        self.btn2.deleteLater()
        self.ju_text.deleteLater()
        self.DepartmentUI()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    fream = MainWindow()
    fream.show()
    app.exec_()
python python-3.x pyqt pyqt5
1个回答
0
投票

创建和删除小部件几乎总是一个坏主意,你的代码落入那些糟糕的想法,最好隐藏小部件,为此你应该使用QStackedWidgetQStackedWidget所做的只是让你在所有小部件上看到一个小部件已经通过改变currentIndex指定。

import sys
from functools import partial
from PyQt5 import QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.center_widget = QtWidgets.QStackedWidget()
        self.setCentralWidget(self.center_widget)
        self.FirstUI()
        self.JuminUI()
        self.DepartmentUI()

    def FirstUI(self):
        widget = QtWidgets.QWidget()
        self.btn1 = QtWidgets.QPushButton('test1', widget)
        self.btn1.move(50, 50)

        self.center_widget.addWidget(widget)
        self.btn1.clicked.connect(partial(self.center_widget.setCurrentIndex, 1))

    def JuminUI(self):
        widget = QtWidgets.QWidget()
        lay = QtWidgets.QVBoxLayout(widget)

        self.ju1 = QtWidgets.QLineEdit('13')
        self.btn2 = QtWidgets.QPushButton('^^^^^^^^^^')
        self.ju_text = QtWidgets.QLabel('asd')

        lay.addWidget(self.ju_text)
        lay.addWidget(self.ju1)
        lay.addWidget(self.btn2)

        self.center_widget.addWidget(widget)
        self.btn2.clicked.connect(partial(self.center_widget.setCurrentIndex, 2))

    def DepartmentUI(self):
        widget = QtWidgets.QWidget()
        lay = QtWidgets.QVBoxLayout(widget)
        lay.addWidget(QtWidgets.QPushButton('sdfsdf'))

        self.center_widget.addWidget(widget)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    fream = MainWindow()
    fream.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.