import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.setup_ui() def setup_ui(self): self.setWindowTitle("Qt桌面应用程序") self.button_1_flag = 1 self.resize(300, 300) self.button_1 = QPushButton() self.button_1.setText("切换标签") self.button_2 = QPushButton() self.button_2.setText("删除当前标签") self.v_box_layout = QVBoxLayout() self.v_box_layout.setAlignment(Qt.AlignTop) self.setLayout(self.v_box_layout) self.h_box_layout = QHBoxLayout() self.h_box_layout.addWidget(self.button_1) self.h_box_layout.addWidget(self.button_2) self.v_box_layout.addLayout(self.h_box_layout) self.label_1 = QLabel() self.label_1.setText("标签1") self.label_1.setStyleSheet("background-color:CornflowerBlue") self.label_2 = QLabel() self.label_2.setText("标签2") self.label_2.setStyleSheet("background-color:DarkSeaGreen") self.label_3 = QLabel() self.label_3.setText("标签3") self.label_3.setStyleSheet("background-color:HotPink") self.label_4 = QLabel() self.label_4.setText("标签4") self.label_4.setStyleSheet("background-color:Blue") self.stacked_layout = QStackedLayout() self.v_box_layout.addLayout(self.stacked_layout) # self.stacked_layout.setStackingMode(QStackedLayout.StackAll) self.stacked_layout.addWidget(self.label_1) self.stacked_layout.addWidget(self.label_2) self.stacked_layout.addWidget(self.label_3) self.stacked_layout.insertWidget(0, self.label_4) print(self.stacked_layout.widget(0)) def stacked_layout_current_changed(value): print(f"当前Index:{value}") self.stacked_layout.currentChanged.connect(stacked_layout_current_changed) def stacked_layout_widget_removed(value): print(f"Index:{value}被删除了") self.stacked_layout.widgetRemoved.connect(stacked_layout_widget_removed) def button_1_clicked(): if self.stacked_layout.count() > 0: self.stacked_layout.setCurrentIndex( (self.stacked_layout.currentIndex() + 1) % self.stacked_layout.count()) self.stacked_layout.currentWidget().setText( self.stacked_layout.currentWidget().text().split(" ")[0] + " Index:" + str(self.stacked_layout.indexOf(self.stacked_layout.currentWidget()))) self.button_1.clicked.connect(button_1_clicked) def button_2_clicked(): self.stacked_layout.removeWidget(self.stacked_layout.currentWidget()) self.button_2.clicked.connect(button_2_clicked) if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())