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 ...
随机推荐
- 一个文件搞定Asp.net core 3.1动态页面转静态页面
最近一个Asp.net core项目需要静态化页面,百度查找了一下,没有发现合适的.原因如下 配置麻烦. 类库引用了第三方类,修改起来麻烦. 有只支持MVC,不支持PageModel. 继承Actio ...
- E. Alternating Tree 树点分治|树形DP
题意:给你一颗树,然后这颗树有n*n条路径,a->b和b->a算是一条,然后路径的权值是 vi*(-1)^(i+1) 注意是点有权值. 从上头往下考虑是点分治,从下向上考虑就是树形DP, ...
- python常见面试题讲解(二)计算字符个数
题目描述 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字 ...
- byte值的问题
byte值的问题 byte b1 = 127; byte b2 = (byte)128; //-128 byte b3 = (byte)129; //-127 byte b4 = (byte)130; ...
- ngnix随笔一
nginx安装及启动 1.用yum源安装,首先配置yum源 在“/etc/yum.repo.d/”下创建yum源文件 例如:cd /etc/yum.repo.d/nginx.repo [nginx-s ...
- php日志监控
<?php date_default_timezone_set('Asia/Shanghai'); $time = date('Y-m-d H:i:s',time()); //访问时间 $ip ...
- [JavaWeb基础] 026.JAVA中使用Axis搭建webservice-环境搭建(一)
在实际的项目开发过程中,我们经常会使用第三方交互,特别是在前后端语言不一致的情况下,相信webservice这个第三方控件大家都清楚.后面会慢慢带大家来学习它的使用方式,下面就先讲讲它的工具搭建. 一 ...
- nginx 搭建图片服务器(windows 下,linux 下原理应该一样)
作者的心声:很多知道的.用过的东西,不写下来,下次还要百度查询,浪费时间和精力,故本次写下学习笔记,方便下次查阅. 题外话:如有读者通过我这篇博客解决了工作上的难题,可以给个评论,让我一起分享你的喜悦 ...
- 一文彻底搞懂BERT
一.什么是BERT? 没错下图中的小黄人就是文本的主角Bert ,而红色的小红人你应该也听过,他就是ELMo.2018年发布的BERT 是一个 NLP 任务的里程碑式模型,它的发布势必会带来一个 NL ...
- oracle11g数据库导入、导出操作
一.在linux系统中导入数据库. 1.linux中先输入 su - oracle下切换到oracle用户.然后以sysdba打开sqlplus:sqlplus / as sysdba 然后创建表空间 ...