QTabWidget 中 关于Tab 关闭和添加的基本教程!
QTabWidget是PyQt5 中使用较为广泛的容器之一,经常会在日常使用的软件中用到它;QTabwidget是由几个标签组成,每个标签可以当作一个界面,下面就是应用Qtabwidget的一个简单例子:
上面 Tab1,Tab2是两个标签,当点 Tab1 时,就进入一个 Tab1 的界面,界面上面由3个文本标签:tab1_lable1,tab2_label2和tab3_label3 ;Tab2 同样是另一个界面的按钮入口。
QTabwidget中的标签(Tab)也可以通过按钮自行打开和关闭;要实现这种功能,需要两个步骤:1,给每个标签(Tab)加上关闭按钮,通过 **tabWidget.setTabsClosable(True) **机制实现,2,给标签(Tab)添加打开功能(打开是针对于每一个Tab)和关闭功能(关闭是统一针对于所有Tab实现的),打开和关闭功能借助的是 Qt 中的信号槽。展示效果如下(这里展示的只是关闭功能):
利用 Qt designer创建UI文件
Qtabwidget的界面可以用代码实现,也可以用Qt designer制作;这里以Qt designer为例,首先打开Qt designer ,在主窗口创建一个 Widget,然后找到左边的导航栏,找到Containers(容器)中的Tab wdiget控件,选中这个控件之后,拖到主窗口Widget当中;
调整 TabWidget 的布局方式,把 TabWidget中的在 TabWidget 的边缘处,鼠标右击选择 **Lay out -> Lay Out in a Grid ** 方式,这样控件就可以随着窗口的大小而自适应调整。
Tab widget 中的 Tab(标签) 中关闭按钮的添加方式:用鼠标选中 TabWidget ,在右边导航栏中找到 Property Editor -> QTabWidget -> tabsClosable,在tabsClosable 后面的对话框上打上勾,之后Tab(标签)的右上角就会出现 关闭按钮 ×图标 :
还需要再 Tab1 窗口内加入两个 按钮tab_3和tab_4两个按钮,用来控制后面标签 界面 tab3 和 tab4 的打开;增加按钮功能比较简单,从左边导航栏中可以直接添加,可以通过右边的属性编辑器中对按钮中的 文本大小、文本字体进行修改。
上里的标签(Tab)数量太少 ,新添加两个标签 tab3、tab4 来对应上面已经建立好的两个按钮 tab_3 和 tab_4的启动;添加方法如下面,添加完毕时不要忘记修改一下标签的名字。
当整个UI界面创建好之后,需要把界面保存下来,保存方法 : File -> Save As…->你的目录
保存完毕之后,利用 pyqt 中的 pygui 工具把 以 ui结尾的文件 转化为 py文件,这里,Pygui文件已经在Pycharm配置好了,直接在 Pycharm 点一下就可以直接使用,具体使用方法参考这篇文章:Qt Designer 在 Pycharm中的环境配置教程!
上一步生成的py文件不可以直接使用,使用时需要在文件的最后加入几行代码来 创建生成入口:
if __name__ =='__main__':
import sys
from PyQt5.QtWidgets import QApplication,QWidget
app = QApplication(sys.argv)
ui_mai = Ui_Form()
mai_dow = QWidget()
ui_mai.setupUi(mai_dow)
mai_dow.show()
app.exec_()
用Pycharm启动脚本,之前创建好的界面就能够展现出来,但目前没有加入任何功能,整个界面的按钮点击后不会有任何反应。
界面添加功能,分为两个部分:
1,TabWidget中的 标签(Tab)添加关闭功能;
2,按钮tab_3、tab_4 添加信号槽,链接功能就是 Tab 3 、Tab 4标签的打开;
对于第一个功能,Qt中Tabwidget可以利用 tabCloseRequested 来实现:先创建一个关闭标签(利用 remove(tab))函数,然后将 tabwidget 借助 tabCloseRequested 来实现
#相关代码
#tabWidget加入信号槽,把所有Tab链接;
self.tabWidget.tabCloseRequested.connect(self.close_tab)
#tab(标签)关闭函数;
def close_tab(self,index):
self.tabWidget.removeTab(index)
对于第二个功能,按钮添加信息槽:先创建两个函数来实现 tabwidget 添加 tab功能(利用的是Tabwidget 的 addTab功能), 然后把两个 pushbutton 与这两个函数相链接(利用信息槽),代码如下:
#链接信号槽
self.pushButton.clicked.connect(self.add_tab_3)
self.pushButton_2.clicked.connect(self.add_tab_4)
#两个添加 Tab 的函数
def add_tab_3(self):
'''加入Tab 3'''
tab_3 = QtWidgets.QWidget()
tab_3.setObjectName("tab_3")
self.tabWidget.addTab(tab_3,'Tab 3')
def add_tab_4(self):
'''加入Tab 4'''
tab_4 = QtWidgets.QWidget()
tab_4.setObjectName('tab_4')
self.tabWidget.addTab(tab_4,'Tab 4')
到这里 QTabWidget 中 tab (标签)关闭,打开功能基本已经完成,可以看一下效果
————————————————
原文链接:https://blog.csdn.net/weixin_42512684/java/article/details/104099432
QTabWidget 中 关于Tab 关闭和添加的基本教程!的更多相关文章
- 仅在TabControl中的Tab中添加右键菜单
若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...
- 多iframe使用tab标签方式添加、删除、切换的处理实例
紧接着上一篇随笔iframe的内容增高或缩减时设置其iframe的高度的处理方案 如果采用iframe来切换显示内容的方式来展现办公Web.那么需要解决几个问题 1.tab标签需要和显示的iframe ...
- Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页
Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页 在FireMonkey iOS应用程序中的Tab Tab由FMX.TabControl.TTabControl定 ...
- 在VC++中使用Tab Control控件
系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用 查阅MSDN文档,对于创建T ...
- Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
做后台管理系统时遇到的问题,关于tab关闭后再打开不显示,或者报错 我在新的tabpanel中加入了一个grid,当我关闭再次打开就会报错Cannot read property 'addCls' o ...
- IDEA中设置Tab多行显示、打开过多自动关闭的方法
IDEA中默认Tab是单行显示的,而且默认允许同时打开10个Tab,继续打开Tab会根据规则关闭之前打开的Tab.但是可以通过设置来符合自己的使用习惯. 一.打开Tab过多自动关闭 1.选择File→ ...
- Zabbix 4.0.2试用(七):在Linux主机中安装zabbix agent并添加该主机(yum源安装)
Zabbix 4.0.2试用(七):在Linux主机中安装zabbix agent并添加主机(yum源安装) 2018年12月20日, 上午6:42 之前介绍的是下载源安装包,编译安装的方式来安装ag ...
- 数据库中老师学生家长表添加自动同意好友自动(AgreeAddingFriend ),默认为True
数据库中老师学生家长表添加自动同意好友自动(AgreeAddingFriend ),默认为True alter table Sys_User add AgreeAddingFriend bit alt ...
- asp.net中的ListBox控件添加双击事件
问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...
随机推荐
- Chipmunk-js物理引擎学习笔记
一.基本概念## 空间:在Chipmunk中,空间是所有对象容器.因此,刚体.形状.链接节点等对象都需要添加到空间中.空间控制这些对象的相互作用. 刚体:物理上的刚体指的是在运动和受力作用后,形状和大 ...
- Spring 自动装配 byType
自动装配 byType,这种模式由属性类型指定自动装配. Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType.然后,如果它的 typ ...
- poj2391 最大流+拆点+二分答案+Floyd
Ombrophobic Bovines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19553 Accepted: 4 ...
- BZOJ1059 二分匹配
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4810 Solved: 2297[Submit][Stat ...
- 【python爬虫】解决歌荒,下歌利器
python下载图片,mp3,想必很多人都早已耳闻,今天给大家来点不一样的, 让你下载高逼格高品质,带进度条,实时显示下载速度 详见源码:https://www.kesci.com/home/proj ...
- shiro认证通过之后的授权
subject.hasRole("") ; subject.hasRoles(List); subject.hasAllRoles(); subject.isPermitted(& ...
- GC总结
概述 GC(Garbage Collection),需要完成的3件事 哪些内存需要回收? 什么时候回收? 如何回收? 为什么需要了解GC和内存分配?更好的监控和调节 排查各种内存溢出,内存泄漏 避免G ...
- Pandas读取文件报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start byte
pandas读取文件时报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start by ...
- 【JUC】CountDownLatch和Java枚举的使用例子
public enum CountryEnum { ONE(1,"春"), TWO(2,"夏"), THREE(3,"秋"), FOUR(4 ...
- mysql去重复关键字distinct的用法
distinct的去重复的提前是表中所有列的数据完成相同时,才能把相同的数据只保留一条,并不是 distinct 列名,除去某一列相同的数据,并且 distinct要放在第一个列前面.案例如下:一个学 ...