Не могу сделать вкладку внутри виджета
Пытаюсь сделать вкладки внутри выдвигающегося виджета, однако все идет не по плану и я не понимаю почему, помогите пожалуйста
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
#класс с основным окном и выдвигающимся виджетом
class gg(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName('ОКОШЕЧКО')
#размер основного окна
MainWindow.resize(850, 500)
self.widget = QtWidgets.QWidget(MainWindow)
self.widget.setStyleSheet('background-color: #ccffbd;')
self.widget.setObjectName('widget')
#создаем виджет справа
self.frame2 = QtWidgets.QFrame(self.widget)
self.frame2.setGeometry(QtCore.QRect(0, 0, 50, 500))
self.frame2.setStyleSheet("background: #7eca9c;")
self.frame2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame2.setObjectName("frame2")
#попытка сделать вкладку
self.tab1 = QtWidgets.QTabWidget()
self.tab1.addTab(QtWidgets.QLabel('1'),
'2')
self.tab1.addTab(QtWidgets.QLabel('3'),
'4')
self.tab1.setElideMode(QtCore.Qt.ElideLeft)
self.tab1.setCurrentIndex(0)
#попытка указать кнопку открытия другой вкладки в виджете frame2
lay = QtWidgets.QVBoxLayout()
lay.addWidget(self.tab1)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
pass
#создаем класс, который наследуется от виджета и заполняем его минимальной логикой
class MainWindow(QtWidgets.QMainWindow, gg):
def __init__(self):
super().__init__()
self.setupUi(self)
## self.btn.setCheckable(True)
## self.btn.installEventFilter(self)
self.frame2.installEventFilter(self)
#устанавливаем размер виджета ДО и ПОСЛЕ анимации
self._animation = QtCore.QPropertyAnimation(self.frame2, b'size', self)
self._animation.setStartValue(QtCore.QSize(50, self.height()))
self._animation.setEndValue(QtCore.QSize(200, self.height()))
self._animation.setDuration(200)
#функция с анимацией выдвижения виджета путем наведения курсора
def eventFilter(self, obj, event):
# if self.btn is checked:
if self.frame2 is obj:
#анимация выдвижения
if event.type() == event.Enter:
self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
self._animation.start()
#анимация закрытия виджета
elif event.type() == event.Leave:
self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
self._animation.start()
return super().eventFilter(obj, event)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
p = MainWindow()
p.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: Иван
→ Ссылка
Вопрос не совсем понял, но чтобы разместить QTabWidget внутри вашего выдвигающегося виджета:
self.tab1 = QtWidgets.QTabWidget(self.widget)
Однако, по умолчанию он будет постоянно включен.
Попробуйте понять, когда вы хотите видеть вкладки, а когда их надо скрыть:
self.tab1.hide()
self.tab1.show()
Помните, что функции можно вызывать после выполнения анимации:
self._animation.finished.connect(lambda: print('Какая-то функция'))
И в процессе выполнения анимации:
self._animation.valueChanged.connect(lambda: print('Какая-то функция'))