pyqt5 自定义控件_实战PyQt5:053-堆栈窗口QStackedWidget

pyqt5 自定义控件_实战PyQt5:053-堆栈窗口QStackedWidget_第1张图片

QStackedWidget简介

QStackedWidget,顾名思义,就是将部件存放在堆栈中,每个部件都有索引,可以指定索引来显示某一层的部件。QStackedWidget类提供了多页面切换的布局,一次只能看到其中的一个页面,QStackedWidget可用于创建类似于QTabWidget提供的用户界面。

QStackedWidget常用方法有:

  • addWidget(): 添加一个页面,并返回页面的索引;
  • count(): 获取页面的数量;
  • currentIndex(): 获取当前页面的索引值;
  • current(): 获取当前页面;
  • indexOf(): 获取指定页面的索引值;
  • insertWidget(): 在指定索引位置处添加页面;
  • removeWidget(): 移除QWidget页面,并没有删除,只是从布局中移除并被隐藏;
  • widget(): 获取指定索引所对应的页面;
  • setCurrentIndex(index): 设置索引index所在的页面为当前页面;
  • setCurrentWidget(widget): 设置widget页面为当前页面。

QStackedWidget常用信号:

  • currentChanged(index): 当前页面发生变化时候发射,index为新的索引值;
  • widgetRemoved(index): 页面被移除时候发射,index为页面对应的索引值。

QStackedWidget类继承关系:

pyqt5 自定义控件_实战PyQt5:053-堆栈窗口QStackedWidget_第2张图片

测试QStackedWidget

创建文件qstatckedwidget.py,使用一个放置在左边的工具条,添加三个QToolButton, 点击不同的按钮,使用QStackedWidget切换到不同的页面。完整代码如下:

import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import (QApplication, QMainWindow, QStackedWidget,                             QToolBar, QToolButton, QStyle, QColorDialog, QFontDialog,                             QVBoxLayout, QGroupBox, QRadioButton) class DemoStackedWidget(QMainWindow):    def __init__(self, parent=None):        super(DemoStackedWidget, self).__init__(parent)                    # 设置窗口标题        self.setWindowTitle('实战PyQt5: QStackedWidget Demo!')              # 设置窗口大小        self.resize(480, 360)              self.initUi()            def initUi(self):         toolBar = QToolBar(self)        self.addToolBar(Qt.LeftToolBarArea, toolBar)                btnColor = self.createButton('颜色对话框')        btnColor.clicked.connect(lambda: self.onButtonClicked(0))        toolBar.addWidget(btnColor)        btnFont = self.createButton('字体对话框')        btnFont.clicked.connect(lambda: self.onButtonClicked(1))        toolBar.addWidget(btnFont)        btnUser = self.createButton('分组部件')        btnUser.clicked.connect(lambda: self.onButtonClicked(2))        toolBar.addWidget(btnUser)         self.mainWidget = QStackedWidget(self)                #添加三个widget,演示三个页面之间的切换                # 颜色对话框        self.mainWidget.addWidget(QColorDialog(self))        #字体对话框        self.mainWidget.addWidget(QFontDialog(self))        #自定义控件        self.mainWidget.addWidget(self.createExclusiveGroup())                #设置中心窗口        self.setCentralWidget(self.mainWidget)            def createButton(self, text):        icon = QApplication.style().standardIcon(QStyle.SP_DesktopIcon)        btn = QToolButton(self)        btn.setText(text)        btn.setIcon(icon)        btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)                return btn        def onButtonClicked(self, index):        if index 

运行结果如下图:

pyqt5 自定义控件_实战PyQt5:053-堆栈窗口QStackedWidget_第3张图片

测试QStacedWidget

本文知识点

  • 在不同的位置停靠QToolBar;
  • 使用QStackedWidget切换显示不同的页面;
  • 认识QColorDialog;
  • 认识QFontDialog。

喜欢本文内容就收藏,点赞,评论,关注和转发。

你可能感兴趣的:(pyqt5,自定义控件,无法创建新的堆栈防护页面)