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

时间:2018-08-31 05:45:05

标签: python python-3.x pyqt pyqt5

我正在使用QPushButton加载UI。 First -> Jumin -> Department -> next -> next我要按顺序创建UI。问题是我无法将第三个Department加载到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_()

1 个答案:

答案 0 :(得分: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_())