PyQt5:选项卡控件QTabWidget、堆栈控件QStackedWidget、停靠窗口控件和容纳文档的多窗口

一、选项卡控件QTabWidget

1.常用方法

        addTab(): 添加一个标签;
        insertTab(): 在指定位置插入一个标签;
        removeTab(): 删除指定索引的标签;
        setTabText(): 设置指定索引标签的文本信息;
        tabText(): 获得指定索引标签的文本信息;
        setTabIcon(): 设置指定索引标签的图标;
        tabIcon(): 获得指定索引标签的图标;
        currentWidget(): 获得当前活动标签的部件;
        widget(): 获得指定标签索引的部件;
        indexOf(): 获得指定部件的标签索引;
        count(): 总标签数;
        setTabPosition(): 设置标签的显示位置,值为(北:QTabWidget.North, 南:QTabWidget.South, 西:QTabWidget.West, 东:QTabWidget.East);
        setTabShape(): 设置标签的形状, 值为:(四边形:QTabWidget.Rounded, 三角形:QTabWidget.Triangular)。

2.常用信号

        currentChanged: 当前标签页发生改变后,发射该信号;
        tabCloseRequested: 标签页关闭请求时,发射该信号;
        tabBarClicked: 单击了标签条,发射该信号;
        tabBarDoubleClicked: 双击了标签条,发射该信号。

3.代码

代码概述:

选项卡控件最常用的方法就是addTab(),代码中有使用方法,其他操作同QWidget用法。
import sys

from PyQt5.QtWidgets import *
'''
选项卡控件最常用的方法就是addTab(),代码中有使用方法,其他操作同QWidget用法。
'''
class myWin(QTabWidget):
    def __init__(self):
        super(myWin, self).__init__()
        self.setWindowTitle('选项卡控件')
        self.resize(300,80)
        self.setUI()
        self.setw1_ui()
        self.setw2_ui()
        self.setw3_ui()
    def setUI(self):
        self.w1=QWidget()
        self.w2 = QWidget()
        self.w3 = QWidget()
        self.addTab(self.w1, '选项1')
        self.addTab(self.w2, '选项2')
        self.addTab(self.w3, '选项3')

    def setw1_ui(self):
        l1=QHBoxLayout()
        self.w1.setLayout(l1)
        b1=QPushButton('确定')
        b2 = QPushButton('取消')
        l1.addWidget(b1)
        l1.addWidget(b2)
    def setw2_ui(self):
        l2=QHBoxLayout()
        self.w2.setLayout(l2)
        lable1=QLabel('姓名')
        lineEdit=QLineEdit()
        l2.addWidget(lable1)
        l2.addWidget(lineEdit)
    def setw3_ui(self):
        l3=QHBoxLayout()
        self.w3.setLayout(l3)
        label_sex=QLabel('婚否')
        checkBox=QCheckBox()
        l3.addWidget(label_sex)
        l3.addWidget(checkBox)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = myWin()
    window.show()
    sys.exit(app.exec())

二、堆栈窗口控件QStackedWidget

代码:

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class myWin(QTabWidget):
    def __init__(self):
        super(myWin, self).__init__()
        self.setWindowTitle('列表控件')
        self.lay=QHBoxLayout()
        self.setLayout(self.lay)
        self.setUI_listWidget()
    def setUI_listWidget(self):
        self.listWidget = QListWidget()
        self.lay.addWidget(self.listWidget)
        self.listWidget.insertItem(0,'联系方式')
        self.listWidget.insertItem(1, '个人信息')
        self.listWidget.insertItem(2, '教育程度')
        self.listWidget.currentRowChanged.connect(self.k)
        self.w1=QWidget()
        self.w2 = QWidget()
        self.w3 = QWidget()

        self.stack=QStackedWidget()
        self.stack.addWidget(self.w1)
        self.stack.addWidget(self.w2)
        self.stack.addWidget(self.w2)
        self.lay.addWidget(self.stack)

        self.setw1_ui()
        self.setw2_ui()
        self.setw3_ui()

        '''
        在 self.listWidget.itemClicked.connect(self.u) 中,当列表控件中的一个项目被点击时,itemClicked 信号会被触发。
    而连接到这个信号的槽函数 self.u 会接收到一个参数,这个参数就是被点击的项目对象。在这里,l 就是接收到的被点击的项目对象,通过
    它可以获取项目的相关信息。这种情况同样在QComBox,QListView控件中一样存在
        '''
    def setw1_ui(self):
        l1=QHBoxLayout()
        self.w1.setLayout(l1)
        b1=QPushButton('确定')
        b2 = QPushButton('取消')
        l1.addWidget(b1)
        l1.addWidget(b2)
    def setw2_ui(self):
        l2=QHBoxLayout()
        self.w2.setLayout(l2)
        lable1=QLabel('姓名')
        lineEdit=QLineEdit()
        l2.addWidget(lable1)
        l2.addWidget(lineEdit)
    def setw3_ui(self):
        l3=QHBoxLayout()
        self.w3.setLayout(l3)
        label_sex=QLabel('婚否')
        checkBox=QCheckBox()
        l3.addWidget(label_sex)
        l3.addWidget(checkBox)
    def k(self,m):
        print(m)
        self.stack.setCurrentIndex(m)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = myWin()
    window.show()
    sys.exit(app.exec())

三、悬浮窗口QDockWidget

代码:

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class myWin(QMainWindow):
    def __init__(self):
        super(myWin, self).__init__()
        self.setWindowTitle('停靠窗口控件')
        self.lay=QHBoxLayout()
        self.setLayout(self.lay)
        self.items=QDockWidget('悬浮窗口',self)
        self.listWidget=QListWidget()
        self.listWidget.addItem('选项1')
        self.listWidget.addItem('选项2')
        self.listWidget.addItem('选项3')
        self.items.setWidget(self.listWidget)
        self.setCentralWidget(QLineEdit())
        self.addDockWidget(Qt.RightDockWidgetArea,self.items)
        # self.items.setFloating(True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = myWin()
    window.show()
    sys.exit(app.exec())

四、容纳多文档的窗口QMdiArea

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class myWin(QMainWindow):
    a=0
    def __init__(self):
        super(myWin, self).__init__()
        self.setWindowTitle('停靠窗口控件')
        self.mdi=QMdiArea()
        self.setCentralWidget(self.mdi)
        bar = self.menuBar()
        file=bar.addMenu('文件')
        # file=bar.addAction('文件')
        f1=file.addAction('新建')
        f2 = file.addAction('打开')
        f3 = file.addAction('保存')
        file.triggered.connect(self.k)
    def k(self,p):
        print(p.text())
        if p.text()=='新建':
            myWin.a=myWin.a+1
            print(myWin.a)
            sub=QMdiSubWindow()
            sub.setWidget(QTextEdit())
            sub.setWindowTitle('子窗口'+str(myWin.a))
            self.mdi.addSubWindow(sub)
            sub.show()
        elif p.text()=='打开':
            self.mdi.cascadeSubWindows()
        elif p.text()=='保存':
            self.mdi.tileSubWindows()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = myWin()
    window.show()
    sys.exit(app.exec())

四、容纳多文档的窗口

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class myWin(QMainWindow):
    a=0
    def __init__(self):
        super(myWin, self).__init__()
        self.setWindowTitle('容纳多文档的窗口')
        self.mdi=QMdiArea()
        self.setCentralWidget(self.mdi)
        bar = self.menuBar()
        file=bar.addMenu('文件')
        # file=bar.addAction('文件')
        f1=file.addAction('新建')
        f2 = file.addAction('打开')
        f3 = file.addAction('保存')
        file.triggered.connect(self.k)
    def k(self,p):
        print(p.text())
        if p.text()=='新建':
            myWin.a=myWin.a+1
            print(myWin.a)
            sub=QMdiSubWindow()
            sub.setWidget(QTextEdit())
            sub.setWindowTitle('子窗口'+str(myWin.a))
            self.mdi.addSubWindow(sub)
            sub.show()
        elif p.text()=='打开':
            self.mdi.cascadeSubWindows()
        elif p.text()=='保存':
            self.mdi.tileSubWindows()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = myWin()
    window.show()
    sys.exit(app.exec())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值