前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt QStackedWidget(层叠窗口部件)

PyQt QStackedWidget(层叠窗口部件)

作者头像
用户6021899
发布2019-08-14 15:33:49
3.2K0
发布2019-08-14 15:33:49
举报
文章被收录于专栏:Python编程 pyqt matplotlib

本篇介绍PyQt 的 层叠窗口部件。

QStackedWidget (层叠窗口部件)和 QTabWidget 的作用相似,都可以把多组不同的部件 放置到不同的页面显示,从而节省 窗口空间。它们的使用方法也相似,通过下面的方法可以添加页面:

代码语言:javascript
复制
self.stackedWidget.addWidget(widget)

唯一不同的地方在于,不像 TabWidget, 层叠窗口部件没有 Tab 标签,必须借助其他部件的 信号才能在各个页面之间进行导航。下面的例子使用了组合框 也层叠窗口部件进行关联从而为后者提供页面导航。

代码语言:javascript
复制
import sys
from PyQt5.QtWidgets import *
#from PyQt5.QtGui import QIcon
#from PyQt5.QtCore import Qt, QDate, QTime, QDateTime, QTimer

class Widget(QDialog):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.setWindowTitle("层叠窗口部件演示")
        self.cbBox = QComboBox()
        self.cbBox.addItems(["页面1","页面2"])
        self.textEdit = QTextEdit()
        #self.textEdit.setFixedHeight(200)
        self.textEdit.setText(" Input something here:")
        self.textEdit.selectAll()
        self.stackedWidget = QStackedWidget()
        
        self.stackedWidget.addWidget(self.create_widget1())
        self.stackedWidget.addWidget(self.textEdit)
        layout = QVBoxLayout()
        layout.addWidget(self.cbBox)
        layout.addWidget(self.stackedWidget)
        self.setLayout(layout)
        self.resize(250,50)
        #下拉框选择改变时 就改变 层叠窗口部件的当前页面
        self.cbBox.currentIndexChanged[int].connect(self.on_cbBox_currentIndexChanged)
        
        self.stackedWidget.currentChanged[int].connect(self.on_currentChanged)
    def create_widget1(self):
        #创建自定义复合窗口部件
        
        widget = QWidget()#step1
        gLayout = QGridLayout()
        
        label1 = QLabel("姓名:")
        lineEdit1 = QLineEdit()
        label1.setBuddy(lineEdit1)
        label2 = QLabel("性别:")
        buttonGroup = QButtonGroup()
        radioButton1 = QRadioButton("男")
        radioButton2 = QRadioButton("女")
        radioButton2.setChecked(True)
        #同一button group 或同一 父窗体的 为一个分组,多选一
        buttonGroup.addButton(radioButton1)
        buttonGroup.addButton(radioButton2)
        gLayout.addWidget(label1, 0, 0)
        gLayout.addWidget(lineEdit1, 0, 1, 1, 2)
        gLayout.addWidget(label2,1,0)
        gLayout.addWidget(radioButton1, 1, 1)
        gLayout.addWidget(radioButton2, 1, 2)
        widget.setLayout(gLayout)#step2
        return widget
    def on_cbBox_currentIndexChanged(self, index):
        '''下拉框选择改变时 就改变 层叠窗口部件的当前页面'''
        self.stackedWidget.setCurrentIndex(index)
        
    def on_currentChanged(self, index):
        print("current tab index:", index)
        print("current tab index:", self.stackedWidget.currentIndex())
        print("current tab widget:", self.stackedWidget.currentWidget())
        print("tab count", self.stackedWidget.count())
        #self.stackedWidget.setCurrentIndex(1)  #可通过代码设定当前tab
        #self.stackedWidget.setTabEnabled (self, int index, bool)  #disable Tab
if __name__ == '__main__':
    app = QApplication(sys.argv)
    wg = Widget()
    wg.show()
    sys.exit(app.exec_())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档