我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
QTabBar 类
- QTabBar基础
- QTabBar 类直接继承自 QWidget。该类提供了一个选项卡栏
- 通过addTab()可以为选项卡栏添加选项卡,但是并没有为每个选项卡提供相应的页面
- 要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页面,可以通过 QStackedLayout 布局为选项卡提供页面
- PyQt 也提供了一个现成的选项卡部件 QTabWidget
QTabWidget 选项卡窗口框控件
- 描述
- QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面
- 如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同界面的选项卡中
- 该类提供了一个选项卡栏(QTabBar)和一个相应的页面区域,用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同
- QTabWidget 类的大部分功能由 QTabBar(主要处理选项卡部分)和 QStackedWidget(主要处理组织页面的功能)提供
- 个人理解:QTabWidget是一个放置设置了显示页面的QTabBar 的容器
- 继承自:QWidget
- 使用步骤
- 1、创建一个 QTabWidget
- 2、为每个选项卡创建一个页面(容器),通常为 QWidget(不要指定父控件)
- 3、把子部件插入到页面部件(即容器)中
- 4、使用 addTab()或 insertTab()把页面部件放入选项卡部件
- 5、若容器中的内容不可见,则使用 resize()函数设置 QTabWidget 的大小使其可见
- 功能作用
- 构造函数
QTabWidget(parent) # 创建QTabWidget对象的同时设置父对象
- 添加选项卡
addTab(QWidget, str) -> int # 添加选项卡到最后,并添加控件到选项卡的同时设置选项卡标题,返回选项卡索引 addTab(QWidget, QIcon, str) -> int # 添加选项卡到最后,并添加控件到选项卡的同时设置选项卡图标和标题,返回选项卡索引 insertTab(int, QWidget, str) -> int # 在指定索引位置插入选项卡,并添加控件到选项卡的同时设置选项卡标题,返回选项卡索引 insertTab(int, QWidget, QIcon, str) -> int # 在指定索引位置插入选项卡,并添加控件到选项卡的同时设置选项卡图标和标题,返回选项卡索引
- 选项卡设置
setTabPosition(TabPosition) # 设置选项卡位置 # 参数 QTabWidget.TabPosition # QTabWidget.North # 0,选项卡显示在上方 # QTabWidget.South # 1,选项卡显示在下方 # QTabWidget.West # 2,选项卡显示在左侧 # QTabWidget.East # 3,选项卡显示在右侧 setTabShape(TabShape) # 设置选项卡形状 # 参数 QTabWidget.TabShape # QTabWidget.Rounded # 0,丰满的,尖角 # QTabWidget.Triangular # 2,三角柱,圆角 setTabText(index, str) # 设置指定索引选项卡显示文本 setTabsClosable(bool) # 设置是否显示选项卡上的关闭按钮 setMovable(bool) # 设置选项卡是否可以移动 setTabIcon(index, QIcon) # 给指定索引选项卡设置图标 setIconSize(QSize) # 统一设置选项卡图标大小 setUsesScrollButtons(bool) # 设置是否显示选项卡滚动箭头控件 setTabBarAutoHide(bool) # 设置选项卡数量少于2个时是否自动隐藏选项卡栏 setElideMode(Qt.TextElideMode) # 设置选项卡省略文本中省略号“…”的位置 # 参数 Qt.TextElideMode # Qt.ElideLeft # 0,省略号出现在文本的左侧 # Qt.ElideRight # 1,省略号出现在文本的右侧 # Qt.ElideMiddle # 2,省略号出现在文本的中间 # Qt.ElideNone # 3,显示文本中不出现省略号
- 移除选项卡
removeTab(index) # 移除指定索引选项卡
- 隐藏选项卡
hide() # 隐藏选项卡 setVisible(bool) # 设置选项卡是否可见
- 选项卡是否可用
setTabEnabled(index, bool) # 设置选项卡是否可用
- 当前选项卡设置
setCurrentIndex(index) # 设置指定索引选项卡为当前选项卡 currentIndex() —> int # 获取当前选项卡的索引 setCurrentWidget(QWidget) # 设置添加了指定控件的选项卡为当前选项卡 currentWidget() -> QWidget # 获取当前选项卡内添加的QWidget控件
- 选项卡个数
count() # 获取选项卡的数量
- 设置适合文档页面的模式
setDocumentMode(bool) # 设置是否以适合文档页面的模式呈现 # documentMode属性为True时,不会呈现选项卡部件框架,即选项卡页面和其后的窗口等页面无框架区分看起来是一个整体
- 构造函数
- 可用信号
currentChanged(int index) # 当前选项卡发生更改时发送此信号,发射新选项卡的索引 # 若没有新的索引,则为−1(比如 QTabBar 中没有选项卡)。该信号比较重要。 tabBarClicked(int index) # 单击选项卡时发送此信号,发射被点击选项卡的索引 tabBarDoubleClicked(int index) # 双击选项卡时发送此信号,发射被点击选项卡的索引 # 若光标下没有选项卡,则为−1。 tabCloseRequested(int index) # 当点击选项卡上的关闭按钮时发送此信号,发射关闭的选项卡的索引
- 示例代码
- 示例1:QTabWidget-功能演示
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QTabWidget-功能演示') self.resize(810, 810) self.widget_list() def widget_list(self): tbw1 = QTabWidget(self) tbw2 = QTabWidget(self) tbw3 = QTabWidget(self) tbw4 = QTabWidget(self) tbw1.setGeometry(0, 0, 400, 400) tbw2.setGeometry(410, 0, 400, 400) tbw3.setGeometry(0, 410, 400, 400) tbw4.setGeometry(410, 410, 400, 400) w11 = QWidget() w12 = QWidget() w21 = QWidget() w22 = QWidget() w31 = QWidget() w32 = QWidget() w41 = QWidget() w42 = QWidget() # 添加选项卡/插入选项卡 tbw1.addTab(w11, '选项卡11') tbw1.insertTab(0, w12, '选项卡12') tbw2.addTab(w21, '选项卡21') tbw2.insertTab(0, w22, '选项卡22') tbw3.addTab(w31, '选项卡31') tbw3.insertTab(0, w32, '选项卡32') tbw4.addTab(w41, '选项卡41') tbw4.insertTab(0, w42, '选项卡42') # 设置选显卡显示位置 tbw1.setTabPosition(QTabWidget.North) tbw2.setTabPosition(QTabWidget.South) tbw3.setTabPosition(QTabWidget.West) tbw4.setTabPosition(QTabWidget.East) # 设置选项卡形状 tbw1.setTabShape(QTabWidget.Rounded) tbw2.setTabShape(QTabWidget.Triangular) tbw3.setTabShape(QTabWidget.Triangular) tbw4.setTabShape(QTabWidget.Rounded) # 设置选项卡显示文本 tbw1.setTabText(0, '测试修改选项卡文本显示超级长的名字10') tbw1.setTabText(1, '测试修改选项卡文本显示超级长的名字11') tbw2.setTabText(0, '测试修改选项卡文本显示超级长的名字20') tbw2.setTabText(1, '测试修改选项卡文本显示超级长的名字21') tbw3.setTabText(0, '测试修改选项卡文本显示超级长的名字30') tbw3.setTabText(1, '测试修改选项卡文本显示超级长的名字31') tbw4.setTabText(0, '测试修改选项卡文本显示超级长的名字40') tbw4.setTabText(1, '测试修改选项卡文本显示超级长的名字41') # 设置选项卡省略文本中省略号“…”的位置 tbw1.setElideMode(Qt.ElideLeft) tbw2.setElideMode(Qt.ElideRight) tbw3.setElideMode(Qt.ElideMiddle) tbw4.setElideMode(Qt.ElideNone) # 其他设置 tbw1.setTabsClosable(True) # 设置是否显示选项卡上的关闭按钮 tbw2.setMovable(True) # 设置选项卡是否可以移动 tbw3.setTabIcon(1, QIcon('../images/bmp/212.bmp')) # 给指定索引选项卡设置图标 tbw3.setIconSize(QSize(15, 15)) # 统一设置选项卡图标大小 tbw4.setUsesScrollButtons(False) # 设置是否显示选项卡滚动箭头控件 # 设置当前显示选项卡 tbw1.setCurrentIndex(0) tbw2.setCurrentIndex(1) tbw3.setCurrentWidget(w31) tbw4.setCurrentWidget(w42) # 设置适合文档页面的模式 tbw1.setDocumentMode(True) tbw2.setDocumentMode(False) tbw3.setDocumentMode(False) tbw4.setDocumentMode(True) # 设置选项卡数量少于2个时是否自动隐藏选项卡栏 tbw2.setTabBarAutoHide(True) def doubleclick_test(index): print(f'tbw2的{index}索引选项卡被双击了') tbw2.removeTab(index) # 点击选项卡关闭按钮发射信号 tbw1.tabCloseRequested.connect(lambda index: print(f'tbw1的{index}索引选项卡关闭按钮被点击了')) # 选项卡双击发射信号 tbw2.tabBarDoubleClicked.connect(doubleclick_test) # 选项卡单击发射信号 tbw3.tabBarClicked.connect(lambda index: print(f'tbw3的{index}索引选项卡被单击了')) # 当前选项卡发生改变时发射信号 tbw4.currentChanged.connect(lambda index: print(f'当前选项卡发生了改变,新索引号为:{index}')) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 效果图
- 示例2:QTabWidget-实战演示
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QTabWidget-实战演练') self.resize(500, 300) self.widget_list() def widget_list(self): self.tabw = QTabWidget() nav_w = QWidget() btn1 = QPushButton('主页') btn2 = QPushButton('简介') btn3 = QPushButton('联系') btn4 = QPushButton('地址') btn1.setObjectName('btn1') btn2.setObjectName('btn2') btn3.setObjectName('btn3') btn4.setObjectName('btn4') vlayout = QVBoxLayout() vlayout.addWidget(btn1) vlayout.addWidget(btn2) vlayout.addWidget(btn3) vlayout.addWidget(btn4) nav_w.setLayout(vlayout) w1 = QWidget() w2 = QWidget() w3 = QWidget() w4 = QWidget() QLabel('主页', w1).move(100, 100) QLabel('简介', w2).move(100, 100) QLabel('联系', w3).move(100, 100) QLabel('地址', w4).move(100, 100) self.tabw.addTab(w1, '主页') self.tabw.addTab(w2, '简介') self.tabw.addTab(w3, '联系') self.tabw.addTab(w4, '地址') hlayout = QHBoxLayout() hlayout.addWidget(nav_w) hlayout.addWidget(self.tabw) self.setLayout(hlayout) QMetaObject.connectSlotsByName(self) def on_btn1_clicked(self): self.tabw.setCurrentIndex(0) def on_btn2_clicked(self): self.tabw.setCurrentIndex(1) def on_btn3_clicked(self): self.tabw.setCurrentIndex(2) def on_btn4_clicked(self): self.tabw.setCurrentIndex(3) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 效果图
- 示例3:优化示例2-隐藏QTabBar
- 通过
self.tabw.tabBar().hide()
隐藏选项卡栏from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QTabWidget-实战演练') self.resize(500, 300) self.widget_list() def widget_list(self): self.tabw = QTabWidget() nav_w = QWidget() btn1 = QPushButton('主页') btn2 = QPushButton('简介') btn3 = QPushButton('联系') btn4 = QPushButton('地址') btn1.setObjectName('btn1') btn2.setObjectName('btn2') btn3.setObjectName('btn3') btn4.setObjectName('btn4') vlayout = QVBoxLayout() vlayout.addWidget(btn1) vlayout.addWidget(btn2) vlayout.addWidget(btn3) vlayout.addWidget(btn4) nav_w.setLayout(vlayout) w1 = QWidget() w2 = QWidget() w3 = QWidget() w4 = QWidget() QLabel('主页', w1).move(100, 100) QLabel('简介', w2).move(100, 100) QLabel('联系', w3).move(100, 100) QLabel('地址', w4).move(100, 100) self.tabw.addTab(w1, '主页') self.tabw.addTab(w2, '简介') self.tabw.addTab(w3, '联系') self.tabw.addTab(w4, '地址') hlayout = QHBoxLayout() hlayout.addWidget(nav_w) hlayout.addWidget(self.tabw) self.setLayout(hlayout) self.tabw.tabBar().hide() QMetaObject.connectSlotsByName(self) def on_btn1_clicked(self): self.tabw.setCurrentIndex(0) def on_btn2_clicked(self): self.tabw.setCurrentIndex(1) def on_btn3_clicked(self): self.tabw.setCurrentIndex(2) def on_btn4_clicked(self): self.tabw.setCurrentIndex(3) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 效果图