Как скрыть элемент при переключении вкладки в tabWidget Python QT

Как при переключении вкладки в tabWidget в зависимости от выбранной вкладки скрыть элемент (то есть выполнить действие).

Я понимаю как это работает: нужно сверять currentIndex и если он равен нужному значению, то выполнять это действие, то есть скрытие, но как это написать в коде? Используя PyQT5.

Код будет что-то вроде этого, но вот как сделать обработчик изменения вкладки?

if currentIndex == 0:
        video.hide()

В доках я нашла

QtWidgets.QTabWidget.currentChanged(index)

но как его правильно применить?


Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import sys
from PyQt5.Qt import *


class MyTableWidget(QWidget):
    def __init__(self, parent=None):
        super(MyTableWidget, self).__init__(parent)

        self.tab1 = QWidget()
        self.tab2 = QWidget()
        
        self.tabs = QTabWidget()
        self.tabs.resize(300, 200)
        self.tabs.addTab(self.tab1, "Tab 1")
        self.tabs.addTab(self.tab2, "Tab 2")
        
        self.tabs.setCurrentIndex(1)
        self.tabs.currentChanged.connect(self.whichTabIsSelected)    # +++

        self.layout = QVBoxLayout()   
        # Create first tab
        self.tab1.layout = QVBoxLayout(self)
        
        self.pushButton1 = QPushButton("Button")
        self.pushButton1.clicked.connect(self.on_click)            
        
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.setLayout(self.tab1.layout)

        # Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)


    @pyqtSlot(int)
    def whichTabIsSelected(self, index):                             # ! index
        print(f"index -> {index}")
        if index == 0:                                               # <---
            print("Делайте что-нибудь.")                             #video.hide()

    @pyqtSlot()
    def on_click(self):
        print(f"tabs.currentIndex = {self.tabs.currentIndex()}")



class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Tabbed window')

        self.table_widget = MyTableWidget(self)    
        self.setCentralWidget(self.table_widget)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = App()
    w.resize(300, 200)
    w.show()
    sys.exit(app.exec_())

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

→ Ссылка