Как мне скрыть / показать левую панель при нажатии на кнопку

Рейтинг: 0Ответов: 0Опубликовано: 03.04.2023

У меня есть приложение, содержащее вкладки с левой стороны. Мне нужно добавить кнопку в верхнем левом углу этих вкладок, при нажатии вкладки будут скрываться и открываться. И необходимо, чтобы вкладки не были полностью скрыты, но были видны их края.

from PyQt5 import QtCore,QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys


class tab_names_are_horizontal_on_the_left:
    global TabBar, TabWidget, ProxyStyle

    class TabBar(QtWidgets.QTabBar):
        def tabSizeHint(self, index):
            s = QtWidgets.QTabBar.tabSizeHint(self, index)
            s.transpose()
            return s
        def paintEvent(self, event):
            painter = QtWidgets.QStylePainter(self)
            opt = QtWidgets.QStyleOptionTab()

            for i in range(self.count()):                   
                self.initStyleOption(opt, i)
                painter.drawControl(QtWidgets.QStyle.CE_TabBarTabShape, opt)                  
                painter.save()

                s = opt.rect.size()
                s.transpose()
                r = QtCore.QRect(QtCore.QPoint(), s)
                r.moveCenter(opt.rect.center())
                opt.rect = r

                c = self.tabRect(i).center()
                painter.translate(c)
                painter.rotate(90)   
                painter.translate(-c)
                painter.drawControl(QtWidgets.QStyle.CE_TabBarTabLabel, opt);
                painter.restore()

    class TabWidget(QtWidgets.QTabWidget):
        def __init__(self):
            QtWidgets.QTabWidget.__init__(self)
            self.setTabBar(TabBar(self))       
            self.setTabPosition(QtWidgets.QTabWidget.West)

    class ProxyStyle(QtWidgets.QProxyStyle):
        def drawControl(self, element, opt, painter, widget):
            if element == QtWidgets.QStyle.CE_TabBarTabLabel:
                r = QtCore.QRect(opt.rect)
                r.setHeight(opt.fontMetrics.width(opt.text) + 42)
                r.moveBottom(opt.rect.bottom())  
                opt.rect = r
            QtWidgets.QProxyStyle.drawControl(self, element, opt, painter, widget)

    class Window_app():
        global app, tab
        app = QApplication([])
        app.setStyle(ProxyStyle())  

        tab = TabWidget()
        tab.setGeometry(
            0, 0,                              
            QApplication.desktop().width(), QApplication.desktop().height())

class Create_tabs():
    tab.addTab(QWidget(), "General")
    tab.addTab(QWidget(), "Tab 2")
    tab.addTab(QWidget(), "Tab 3")
    tab.addTab(QWidget(), "Tab 4")
    tab.addTab(QWidget(), "Tab 5")

class Run_the_application():
    tab.show()
    sys.exit(app.exec_())

введите сюда описание изображения

Я не смог найти код, который решит проблему. Вкладки вложены друг в друга для удобства: чтобы понять, что вложенные классы являются единой неотъемлемой частью чего-либо.

Ответы

Ответов пока нет.