pyqt5使用单击。连接?

2024-10-01 04:58:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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_()

Tags: textselfdefclicklayoutdepartqpushbuttonbtn2
1条回答
网友
1楼 · 发布于 2024-10-01 04:58:50

创建和删除小部件几乎总是一个坏主意,你的代码也会陷入这些坏主意,最好是隐藏小部件,为此你应该使用QStackedWidget,而QStackedWidget所做的只是通过更改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_())

相关问题 更多 >