From 0f2030684e543a9a586e9ff26d54a29fb184bcd2 Mon Sep 17 00:00:00 2001 From: Irony <892768447@qq.com> Date: Thu, 24 Jun 2021 00:02:24 +0800 Subject: [PATCH] =?UTF-8?q?Tab=E8=A7=92=E8=90=BD=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E5=8D=A0=E6=BB=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QProxyStyle/Lib/TabCornerStyle.py | 35 +++++++++++++ QProxyStyle/README.md | 14 ++++- QProxyStyle/ScreenShot/TabCornerStyle.png | Bin 0 -> 21337 bytes QProxyStyle/TabCornerWidget.py | 60 ++++++++++++++++++++++ README.md | 1 + 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 QProxyStyle/Lib/TabCornerStyle.py create mode 100644 QProxyStyle/ScreenShot/TabCornerStyle.png create mode 100644 QProxyStyle/TabCornerWidget.py diff --git a/QProxyStyle/Lib/TabCornerStyle.py b/QProxyStyle/Lib/TabCornerStyle.py new file mode 100644 index 0000000..f6df52b --- /dev/null +++ b/QProxyStyle/Lib/TabCornerStyle.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Created on 2021年06月23日 +@author: Irony +@site: https://pyqt.site , https://github.com/PyQt5 +@email: 892768447@qq.com +@file: TabCornerStyle +@description: +""" +from PyQt5.QtCore import QRect +from PyQt5.QtWidgets import QProxyStyle, QStyle + + +class TabCornerStyle(QProxyStyle): + + def subElementRect(self, element, option, widget): + try: + rect = super(TabCornerStyle, self).subElementRect(element, option, widget) + if element == QStyle.SE_TabWidgetRightCorner and rect.isValid(): + # 标签tab的矩形范围 + tab_rect = self.subElementRect(QStyle.SE_TabWidgetTabBar, option, widget) + # 内容面板的矩形范围 + panel_rect = self.subElementRect(QStyle.SE_TabWidgetTabPane, option, widget) + ext_height = 2 * self.pixelMetric(QStyle.PM_TabBarBaseHeight, option, widget) + # 修正过后填充的矩形范围 + cor_rect = QRect(tab_rect.x() + tab_rect.width() + ext_height, tab_rect.y() + ext_height, + panel_rect.width() - tab_rect.width() - 2 * ext_height, + tab_rect.height() - 2 * ext_height) + return cor_rect + return rect + except Exception as e: + print(e) + return QRect() diff --git a/QProxyStyle/README.md b/QProxyStyle/README.md index 7d9fe67..d64072b 100644 --- a/QProxyStyle/README.md +++ b/QProxyStyle/README.md @@ -2,6 +2,7 @@ - 目录 - [QTabWidget Tab文字方向](#1qtabwidget-tab文字方向) + - [QTabWidget 角落控件位置](#2qtabwidget-角落控件位置) ## 1、QTabWidget Tab文字方向 [运行 TabTextDirection.py](TabTextDirection.py) @@ -10,4 +11,15 @@ 2. `sizeFromContents` 转置size 3. `drawControl` 绘制文字 -![TabTextDirection](ScreenShot/TabTextDirection.png) \ No newline at end of file +![TabTextDirection](ScreenShot/TabTextDirection.png) + +## 2、QTabWidget 角落控件位置 +[运行 TabCornerWidget.py](TabCornerWidget.py) + +1. 通过 `app.setStyle(TabCornerStyle())` 设置代理样式 +2. `setCornerWidget` 设置自定义角落控件 + +原理是通过代理样式中对 `SE_TabWidgetRightCorner` 计算的结果进行校正,使得角落控件占满右边空白位置, +然后再配合自定义控件中使用 `QSpacerItem` 占据右边位置使得 + 号按钮居左,表现效果为 + 号按钮跟随标签的增加和减少 + +![TabCornerStyle](ScreenShot/TabCornerStyle.png) \ No newline at end of file diff --git a/QProxyStyle/ScreenShot/TabCornerStyle.png b/QProxyStyle/ScreenShot/TabCornerStyle.png new file mode 100644 index 0000000000000000000000000000000000000000..4133f625cd29132ec3625750e75220a6d8280323 GIT binary patch literal 21337 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