QTabWidget 中 关于Tab 关闭和添加的基本教程!

QTabWidget是PyQt5 中使用较为广泛的容器之一,经常会在日常使用的软件中用到它;QTabwidget是由几个标签组成,每个标签可以当作一个界面,下面就是应用Qtabwidget的一个简单例子:

1.jpg

上面 Tab1,Tab2是两个标签,当点 Tab1 时,就进入一个 Tab1 的界面,界面上面由3个文本标签:tab1_lable1,tab2_label2和tab3_label3 ;Tab2 同样是另一个界面的按钮入口。

QTabwidget中的标签(Tab)也可以通过按钮自行打开和关闭;要实现这种功能,需要两个步骤:1,给每个标签(Tab)加上关闭按钮,通过 **tabWidget.setTabsClosable(True) **机制实现,2,给标签(Tab)添加打开功能(打开是针对于每一个Tab)和关闭功能(关闭是统一针对于所有Tab实现的),打开和关闭功能借助的是 Qt 中的信号槽。展示效果如下(这里展示的只是关闭功能):

image_show.gif


利用 Qt designer创建UI文件

Qtabwidget的界面可以用代码实现,也可以用Qt designer制作;这里以Qt designer为例,首先打开Qt designer ,在主窗口创建一个 Widget,然后找到左边的导航栏,找到Containers(容器)中的Tab wdiget控件,选中这个控件之后,拖到主窗口Widget当中;

2.jpg

调整 TabWidget 的布局方式,把 TabWidget中的在 TabWidget 的边缘处,鼠标右击选择 **Lay out -> Lay Out in a Grid ** 方式,这样控件就可以随着窗口的大小而自适应调整。

Snipaste_2020-01-27_12-05-36.jpg

Tab widget 中的 Tab(标签) 中关闭按钮的添加方式:用鼠标选中 TabWidget ,在右边导航栏中找到 Property Editor -> QTabWidget -> tabsClosable,在tabsClosable 后面的对话框上打上勾,之后Tab(标签)的右上角就会出现 关闭按钮 ×图标

Snipaste_2020-01-27_13-45-53.jpg

还需要再 Tab1 窗口内加入两个 按钮tab_3tab_4两个按钮,用来控制后面标签 界面 tab3tab4 的打开;增加按钮功能比较简单,从左边导航栏中可以直接添加,可以通过右边的属性编辑器中对按钮中的 文本大小、文本字体进行修改。


Snipaste_2020-01-27_13-50-36.jpg

上里的标签(Tab)数量太少 ,新添加两个标签 tab3、tab4 来对应上面已经建立好的两个按钮 tab_3 和 tab_4的启动;添加方法如下面,添加完毕时不要忘记修改一下标签的名字。

Snipaste_2020-01-27_14-40-36.jpg

当整个UI界面创建好之后,需要把界面保存下来,保存方法 : File -> Save As…->你的目录

Snipaste_2020-01-27_14-45-21.jpg

保存完毕之后,利用 pyqt 中的 pygui 工具把 以 ui结尾的文件 转化为 py文件,这里,Pygui文件已经在Pycharm配置好了,直接在 Pycharm 点一下就可以直接使用,具体使用方法参考这篇文章:Qt Designer 在 Pycharm中的环境配置教程!

Snipaste_2020-01-27_14-51-03.jpg

上一步生成的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启动脚本,之前创建好的界面就能够展现出来,但目前没有加入任何功能,整个界面的按钮点击后不会有任何反应。

Snipaste_2020-01-27_15-07-54.jpg

界面添加功能,分为两个部分:
  • 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 (标签)关闭,打开功能基本已经完成,可以看一下效果

end_imag.gif

本次教程的的完整代码我已经放入 Github 里面了,有兴趣的可以通过此链接来查看:Github


本人专注于数据分析,数据可视化、图像处理方面领域,个人公众号:小张Python,没事常来做做!

要在QTabWidget的标签添加关闭按钮,可以使用自定义QWidget作为标签,并在QWidget添加一个关闭按钮。下面是修改后的示例代码: ```cpp #include <QApplication> #include <QListView> #include <QPushButton> #include <QTabWidget> #include <QStringListModel> #include <QVBoxLayout> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个QListView和一个QTabWidget QListView listView; QTabWidget tabWidget; // 创建一个QStringListModel,并设置给QListView QStringListModel model; model.setStringList({"Tab 1", "Tab 2", "Tab 3"}); listView.setModel(&model); // 将QListView的currentChanged信号与QTabWidget的setCurrentIndex槽函数关联 QObject::connect(&listView, &QListView::clicked, [&](const QModelIndex &index) { tabWidget.setCurrentIndex(index.row()); }); // 将QTabWidget添加到主窗口 tabWidget.setTabsClosable(true); // 允许关闭标签 // 创建一个自定义QWidget作为标签 QWidget *customTab = new QWidget; QVBoxLayout *layout = new QVBoxLayout(customTab); QPushButton *closeButton = new QPushButton("Close"); layout->addWidget(closeButton); layout->addStretch(); tabWidget.setTabWidget(customTab, "Custom Tab"); QObject::connect(closeButton, &QPushButton::clicked, [&]() { int currentIndex = tabWidget.currentIndex(); if (currentIndex >= 0) { tabWidget.removeTab(currentIndex); } }); // 创建一个主窗口,并将QListView和QTabWidget添加到主窗口 QWidget mainWindow; QVBoxLayout mainLayout(&mainWindow); mainLayout.addWidget(&listView); mainLayout.addWidget(&tabWidget); mainWindow.setLayout(&mainLayout); mainWindow.show(); return app.exec(); } ``` 在这个示例,我们首先将QTabWidget的setTabsClosable属性设置为true,以允许关闭标签。然后,我们创建了一个自定义的QWidget作为标签,并在其添加了一个关闭按钮。通过连接关闭按钮的clicked信号和槽函数,当点击关闭按钮时,会根据当前选的标签索引来移除对应的标签。 请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。希望能帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小张Python1

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值