Как мне скрыть / показать левую панель при нажатии на кнопку
У меня есть приложение, содержащее вкладки с левой стороны. Мне нужно добавить кнопку в верхнем левом углу этих вкладок, при нажатии вкладки будут скрываться и открываться. И необходимо, чтобы вкладки не были полностью скрыты, но были видны их края.
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_())
Я не смог найти код, который решит проблему. Вкладки вложены друг в друга для удобства: чтобы понять, что вложенные классы являются единой неотъемлемой частью чего-либо.
Источник: Stack Overflow на русском