实战PyQt5: 050-选项卡控件QTabWidget
bigegpt 2024-10-12 05:25 8 浏览
QTabWidget简介
在GUI应用软件中,多页面的切换的使用范围十分广泛,在操作过程中,用户使用鼠标点击不同的标题栏就可以方便展示不同页面的内容,众多界面共用一块显示区域,在有限的就显示区域中可以很方便地位用户显示更多的信息。
Qt为多页面切换的实现提供了一个专门的控件QTabWidget, 它可以实现在同一区域中自由切换不同页面的内容,该控件是一个容器类控件,并提供友好的页面切换方式。
QTabWidget常用方法有:
- addTab(): 添加一个标签;
- insertTab(): 在指定位置插入一个标签;
- removeTab(): 删除指定索引的标签;
- setTabText(): 设置指定索引标签的文本信息;
- tabText(): 获得指定索引标签的文本信息;
- setTabIcon(): 设置指定索引标签的图标;
- tabIcon(): 获得指定索引标签的图标;
- currentWidget(): 获得当前活动标签的部件;
- widget(): 获得指定标签索引的部件;
- indexOf(): 获得指定部件的标签索引;
- count(): 总标签数;
- setTabPosition(): 设置标签的显示位置,值为(北:QTabWidget.North, 南:QTabWidget.South, 西:QTabWidget.West, 东:QTabWidget.East);
- setTabShape(): 设置标签的形状, 值为:(四边形:QTabWidget.Rounded, 三角形:QTabWidget.Triangular)。
QTabWidget常用信号:
- currentChanged: 当前标签页发生改变后,发射该信号;
- tabCloseRequested: 标签页关闭请求时,发射该信号;
- tabBarClicked: 单击了标签条,发射该信号;
- tabBarDoubleClicked: 双击了标签条,发射该信号。
QTabWidget类继承关系:
测试QTabWidget
创建文件qtabwidget,假设我们设计一个win10系统文件右键菜单属性对话框,其主要内容就是由选项卡控件实现, 在这里实现其选项卡框架, 完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget,
QTabWidget, QMenuBar, QMenu, QAction,
QActionGroup, QVBoxLayout, QLabel)
class DemoTabWidget(QMainWindow):
def __init__(self, parent=None):
super(DemoTabWidget, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QTabWidget Demo!')
# 设置窗口大小
self.resize(480, 360)
self.initUi()
def initUi(self):
self.initMenu()
self.tw = QTabWidget(self)
self.tw.addTab(self.createWidget(0), '常规')
self.tw.addTab(self.createWidget(1), '快捷方式')
self.tw.addTab(self.createWidget(2), '兼容性')
self.tw.addTab(self.createWidget(3), '安全')
self.tw.addTab(self.createWidget(4), '详细信息')
self.tw.addTab(self.createWidget(5), '以前的版本')
self.setCentralWidget(self.tw)
def initMenu(self):
menuBar = self.menuBar()
#添加一个菜单项,在菜单项下课添加子菜单项
fileMenu = menuBar.addMenu('文件')
aExit = QAction('Exit', self)
aExit.triggered.connect(self.close)
fileMenu.addAction(aExit)
#标签条位置控制
posMenu = menuBar.addMenu('标签条位置')
aNorth = QAction('上方', self)
aNorth.setCheckable(True)
aNorth.setChecked(True)
aNorth.triggered.connect(lambda:self.changeTabPos(0))
aSouth = QAction('下方', self)
aSouth.setCheckable(True)
aSouth.triggered.connect(lambda:self.changeTabPos(1))
aWest = QAction('左边', self)
aWest.setCheckable(True)
aWest.triggered.connect(lambda:self.changeTabPos(2))
aEast = QAction('右边', self)
aEast.setCheckable(True)
aEast.triggered.connect(lambda:self.changeTabPos(3))
posGroup = QActionGroup(self)
posGroup.addAction(aNorth)
posGroup.addAction(aSouth)
posGroup.addAction(aWest)
posGroup.addAction(aEast)
posMenu.addAction(aNorth)
posMenu.addAction(aSouth)
posMenu.addAction(aWest)
posMenu.addAction(aEast)
#标签条形状
shapeMenu = menuBar.addMenu('标签条形状')
aRounded = QAction('圆角矩形', self)
aRounded.setCheckable(True)
aRounded.setChecked(True)
aRounded.triggered.connect(lambda:self.changeTabShape(0))
aTriangular = QAction('三角形', self)
aTriangular.setCheckable(True)
aTriangular.triggered.connect(lambda:self.changeTabShape(1))
shapeGroup = QActionGroup(self)
shapeGroup.addAction(aRounded)
shapeGroup.addAction(aTriangular)
shapeMenu.addAction(aRounded)
shapeMenu.addAction(aTriangular)
def changeTabPos(self, index):
switcher = {
0: QTabWidget.North,
1: QTabWidget.South,
2: QTabWidget.West,
3: QTabWidget.East
}
self.tw.setTabPosition(switcher.get(index))
def changeTabShape(self, index):
if index == 0:
self.tw.setTabShape(QTabWidget.Rounded)
else:
self.tw.setTabShape(QTabWidget.Triangular)
def createWidget(self, index):
wid = QWidget()
layout = QVBoxLayout(wid)
label = QLabel(wid)
label.setAlignment(Qt.AlignCenter)
label.setFont(QFont(self.font().family(), 36))
label.setText("选项卡 {}".format(index + 1))
layout.addWidget(label)
wid.setLayout(layout)
return wid
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoTabWidget()
window.show()
sys.exit(app.exec())
运行结果如下图:
本文知识点
- 使用QTabWidget添加多个选项卡;
- 改变选项卡标签的显示位置;
- 改变选项卡标签的形状;
- 使用QActionGroup实现一组菜单项的单选功能;
- 改变QLabel字体的尺寸。
喜欢本文内容就收藏,点赞,评论,关注和转发。
相关推荐
- Go语言泛型-泛型约束与实践(go1.7泛型)
-
来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...
- golang总结(golang实战教程)
-
基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...
- Go 官宣:新版 Protobuf API(go pro版本)
-
原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...
- Golang开发的一些注意事项(一)(golang入门项目)
-
1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...
- golang 托盘菜单应用及打开系统默认浏览器
-
之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...
- golang标准库每日一库之 io/ioutil
-
一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...
- 文件类型更改器——GoLang 中的 CLI 工具
-
我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...
- Go (Golang) 中的 Channels 简介(golang channel长度和容量)
-
这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...
- Golang引入泛型:Go将Interface「」替换为“Any”
-
现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...
- 一文带你看懂Golang最新特性(golang2.0特性)
-
作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...
- Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移
-
以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...
- Golang使用grpc详解(golang gcc)
-
gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...
- Etcd服务注册与发现封装实现--golang
-
服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...
- Golang:将日志以Json格式输出到Kafka
-
在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...
- 如何从 PHP 过渡到 Golang?(php转golang)
-
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)