入门 PyQt6 看过来(案例)15~ 选项卡

本文要实现的功能是通过pyqt的QTabWidget页签栏切换,实现不同页面表单的展示。效果如下

要实现这个功能用到的控件类是QTabWidget,我们接下来先来介绍一下QTabWidget的功能,然后再说设计思路,然后是代码实现。

1 QTabWidget选项卡类

选项卡控件属于QTabWidget类,它可以将窗口设计成多页,默认显示第一个选项卡的页面。通过单击各选项卡可以查看对应的页面。如果在一个窗口中显示的控件很多,则可以先进行拆分,分别放到不同的页面中。不同的页面中的控件的名称不能相同。

QTabWidget类常用的方法如下表所示:

方法说明
addTab()添加选项卡
insertTab()插入选项卡
removeTab()删除选项卡
currentWidget()获取当前选项卡
currentIndex()获取当前选项卡的索引
setCurrentIndex()设置当前选项卡的索引
setCurrentWidget()设置当前选项卡
setTabPosition()设置选项卡的标题位置(QTabWidget.TabPosition.x)
North:标题在北方,即上边(默认)
South:标题在南方,即下边
West:标题在西方,即左边
East:标题在东方,即右边
setTabsClosable()设置是否可以独立关闭选项卡,True表示可以关闭,在每个选项卡旁边会有一个关闭按钮,False表示不可以关闭。
setTabText()设置选项卡的标题文本
tabText()获取指定选项卡的标题文本

注意:在显示选项卡时,如果默认大小显示不下,会自动生成向前和向后的箭头,用户可以单击箭头查看未显示的选项卡。

选项卡控件最常用的信号是切换选项卡的时候发出的currentChanged.

2 功能设计

  • 功能包含基本信息和编程语言两个选项。如下图:

  • 我们只需要设计这两个选项卡就可以了。然后就是在这两个选项卡里设置输入框,标签,以及单选按钮和确定按钮。

  • 编程语言选项下需要配置多选选项按钮:

3 代码实现:

3.1 首先先实现选项卡的配置

        #tabW1和tabW2分别为加入选项卡1和选项卡2
        self.tabW1=QWidget()
        self.tabW2=QWidget()
        self.addTab(self.tabW1,"选项卡1")
        self.addTab(self.tabW2,"选项卡2")

3.2 选项卡1里放置内容

上部分:姓名和性别部分

		#性别单选按钮
		fLayout=QFormLayout()
        self.xm=QLineEdit()
        self.xb1=QRadioButton('男')
        self.xb2=QRadioButton('女')
        self.xb1.setChecked(True)
        self.csny=QLineEdit()
        btn=QPushButton("确定")

下部分放置生日和确定按钮

		hLay=QHBoxLayout()
        hLay.addWidget(self.xb1)
        hLay.addWidget(self.xb2)
        fLayout.addRow('姓名:',self.xm)
        fLayout.addRow('性别:',hLay)
        fLayout.addRow('出生年月',self.csny)
        fLayout.addRow(' ', btn)

最后把这些信息在选项一中配置好一起放菜单1的基本信息里:

		# 修改第一个选项卡标题为 基本信息
        self.setTabText(0,'基本信息')
        self.tabW1.setLayout(fLayout)

3.3 选项二的配置

主要配置就是多选盒子配置

		hLay=QHBoxLayout()
        self.cb1=QCheckBox("C++")
        self.cb2=QCheckBox("Java")
        self.cb3=QCheckBox("C#")
        self.cb1.setChecked(True)
        hLay.addWidget(self.cb1)
        hLay.addWidget(self.cb2)
        hLay.addWidget(self.cb3)
		#设置第二个选项的名字未“编程语言”
        self.setTabText(1,"编程语言")
        self.tabW2.setLayout(hLay)

3.4 配置槽函数

当点击单选按钮多选按钮以及确定的时候,抽发的函数:clickedFunc​

    def clickedFunc(self):
        print(self.xm.text())
        print(self.csny.text())
        if self.xb1.isChecked():
            print(self.xb1.text())
        else:
            print(self.xb2.text())
        # 检查第二个选项卡中的控件
        if self.cb1.isChecked():
            print(self.cb1.text())
        if self.cb2.isChecked():
            print(self.cb2.text())
        if self.cb3.isChecked():
            print(self.cb3.text())

这样,整个设计就完成了。

4 完整代码

大家可以尝试以下完整代码,效果很不错的。

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 选项卡.py
Description:
Author: lzq
date:2024-07-28 16:42
------------------------------------------------
"""
import sys
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QTabWidget, QWidget, QFormLayout, \
    QLineEdit, QRadioButton, QHBoxLayout, QCheckBox


class MyTabWidget(QTabWidget):
    def __init__(self, parent=None):
        super(MyTabWidget, self).__init__(parent)
        self.initUI()
    def initUI(self):
        self.setGeometry(300,300,300,160)
        self.setWindowTitle("QTabWidget测试")
        # 创建选项卡位置 North为上 South下
        self.setTabPosition(QTabWidget.TabPosition.North)

        #tabW1和tabW2分别为加入选项卡1和选项卡2
        self.tabW1=QWidget()
        self.tabW2=QWidget()
        self.addTab(self.tabW1,"选项卡1")
        self.addTab(self.tabW2,"选项卡2")
        self.tabW1_UI()
        self.tabW2_UI()

    def tabW1_UI(self):
        fLayout=QFormLayout()
        self.xm=QLineEdit()
        self.xb1=QRadioButton('男')
        self.xb2=QRadioButton('女')
        self.xb1.setChecked(True)
        self.csny=QLineEdit()
        btn=QPushButton("确定")
        btn.clicked.connect(self.clickedFunc)
        hLay=QHBoxLayout()
        hLay.addWidget(self.xb1)
        hLay.addWidget(self.xb2)
        fLayout.addRow('姓名:',self.xm)
        fLayout.addRow('性别:',hLay)
        fLayout.addRow('出生年月',self.csny)
        fLayout.addRow(' ', btn)
        # 修改第一个选项卡标题为 基本信息
        self.setTabText(0,'基本信息')
        self.tabW1.setLayout(fLayout)
    def tabW2_UI(self):
        hLay=QHBoxLayout()
        self.cb1=QCheckBox("C++")
        self.cb2=QCheckBox("Java")
        self.cb3=QCheckBox("C#")
        self.cb1.setChecked(True)
        hLay.addWidget(self.cb1)
        hLay.addWidget(self.cb2)
        hLay.addWidget(self.cb3)
        self.setTabText(1,"编程语言")
        self.tabW2.setLayout(hLay)
    def clickedFunc(self):
        print(self.xm.text())
        print(self.csny.text())
        if self.xb1.isChecked():
            print(self.xb1.text())
        else:
            print(self.xb2.text())
        # 检查第二个选项卡中的控件
        if self.cb1.isChecked():
            print(self.cb1.text())
        if self.cb2.isChecked():
            print(self.cb2.text())
        if self.cb3.isChecked():
            print(self.cb3.text())


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


本文到此结束,有本事你就别点赞,别关注我。路老师一生清贫,上有老下有小,让我一个人默默的付出吧!

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PythonPyQt库中,可以使用QTabWidget组件实现选项卡功能。在这个例子中,使用了QMainWindow作为主窗口,并在主窗口中创建了一个QTabWidget组件。在这个QTabWidget组件中,通过创建QTabWidget的子窗口QWidget,来实现不同的选项卡界面。每个子窗口代表一个选项卡,可以在其中添加不同的控件和布局来构建界面。 例如,在这个例子中,创建了三个选项卡小控件窗口tab1、tab2和tab3,并将它们添加到QTabWidget中。然后,将QTabWidget设置为主窗口的中心控件,这样选项卡就会显示在主窗口中央的位置上。最后,设置了窗口的标题、图标和大小,并显示出来。 在PyQt中,还提供了丰富的控件和布局,可以根据需要在每个选项卡界面中添加不同的功能和操作。例如,可以使用QPushButton、QLabel、QTextEdit、QComboBox等控件来实现按钮、标签、可编辑框和下拉列表等功能。同时,还可以使用各种布局,如水平布局QHBoxLayout、垂直布局QVBoxLayout、网格布局QGridLayout等,来控制控件的位置和排列方式。 通过点击选项卡标签,可以在不同的选项卡界面之间进行切换。这样,就可以实现在单个窗口中展示多个界面的效果。 总结起来,PythonPyQt库提供了丰富的控件和布局,可以使用QTabWidget组件来实现选项卡功能。通过创建不同的子窗口作为选项卡界面,并在每个界面中添加需要的控件和布局,可以实现在单个窗口中展示多个界面,并通过点击选项卡标签进行切换。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [[PyQt5] 选项卡](https://blog.csdn.net/guolindonggld/article/details/125705028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[PyQt5]高级控件4 - 选项卡QTabWidget](https://blog.csdn.net/yurensan/article/details/121182418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [PyQt5实现单窗口多界面切换 多选项卡示例程序](https://download.csdn.net/download/baidu_36499789/86001356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路卿老师

大哥大姐给点吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值