Я создавал программу на PyQt5.Мне нужно сделать так, чтобы на заданном количестве вкладок в Tab Widget появились надписи

Снизу я выделил часть кода, в которой происходят эти действия. Выводятся цифры только в последней вкладке, а в остальных ничего.

Я создал списки из layout, label и тд, и в цикле выводил их на экран. Потом надо будет выводить много элементов для этого layout.

Помогите, пожалуйста! Я провозился я с этой проблемой больше 3 часов, так и не придумав решения.

self.layoutsStats = []
self.layoutRow = QHBoxLayout()
self.rowLabels = [QLabel('1', self), QLabel('2', self), QLabel('3', self),
                          QLabel('4', self), QLabel('5', self)]
self.layoutRow.addStretch(1)
for i in self.rowLabels:
    self.layoutRow.addWidget(i)
self.layoutRows = []
self.layouts = []
self.scrolls = []
self.widgets = []
self.ws = []
self.layoutRows.append(self.layoutRow)
for i in range(len(rowTitles)):
    self.layoutRows.append(self.layoutRow)
    self.layouts.append(QVBoxLayout())
    self.layouts[i].addStretch(1)
    self.scrolls.append(QScrollArea())

    self.ws.append(QWidget())
    self.ws[i].setLayout(self.layoutRows[i])
    self.ws[i].resize(1118, 40)
    self.layouts[i].addWidget(self.ws[i])

    self.widgets.append(QWidget())
    self.widgets[i].setLayout(self.layouts[i])
    self.scrolls[i].setWidget(self.widgets[i])
    self.scrolls[i].resize(1121, 711)
    self.tabWidget.addTab(self.scrolls[i], rowTitles[i])

Цифры выводятся обрезанными и только на последней вкладке, независимо от количества столбцов

На остальных вкладках просто пусто


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

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

Класс QTabWidget предоставляет контейнер, состоящий из панели вкладок, где каждая вкладка содержит область страницы, где мы можем разместить любой виджет.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class Window(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        
        self.qtabwidget = QtWidgets.QTabWidget(self) 
        
        widget = QtWidgets.QPlainTextEdit("QPlainTextEdit 1")
        label  = 'Tab &1'
        widget2 = QtWidgets.QPlainTextEdit("QPlainTextEdit 2")
        
        # Мы можем добавить вкладки со значками в QTabWidget, используя метод 
        # QTabWidget.addTab(виджет QWidget *, const QIcon & icon, const QString & label). 
        # Виджет представляет виджет внутри вкладки. 
        # Значок представляет собой значок вкладки. метка представляет метку вкладки. 
        # Этот метод возвращает int с позицией вкладки внутри QTabWidget.
        
        tab_index1 = self.qtabwidget.addTab(widget, label)
        
        tab_index2 = self.qtabwidget.addTab(widget2, 'Tab &2')
        self.qtabwidget.setTabIcon(tab_index2, QtGui.QIcon('im.png'))
        self.qtabwidget.setIconSize(QtCore.QSize(32, 32)) # Изменить размер значка вкладок
        
        self.qtabwidget.addTab(
                QtWidgets.QLabel("QLabel Tab &3", alignment=QtCore.Qt.AlignCenter), 
                QtGui.QIcon('Ok.png'),
                'Tab &3')
        
        # Не показывает 
        self.qtabwidget.addTab(None, "Без Виджета")
        
        #print(f"tab_index1={tab_index1}, tab_index2={tab_index2},\n qtabwidget.count={self.qtabwidget.count()}")

        # Мы можем закрыть вкладки QTabWidget, активировав свойство tabsClosable 
        # с помощью метода QTabWidget.setTabsClosable(bool closeable). 
        # Если значение closeable равно True, вкладки будут закрыты, 
        # а если значение False, они не смогут закрыться.
        
        self.qtabwidget.setTabsClosable(True)  
        # Необходимо подключить сигнал QTabWidget.tabCloseRequested() к соответствующему слоту.
        self.qtabwidget.tabCloseRequested.connect(self.qtabwidget_tabcloserequested)
        
        # Изменить форму вкладок QTabWidget
        # Мы можем изменить форму вкладок QTabWidget, используя метод 
        # QTabWidget.setTabShape(TabShape shape). 
        # shape представляет форму вкладок, по умолчанию форма вкладок QTabWidget.Rounded.
        #print(f"\n `tabShape` получает форму вкладок QTabWidget: {self.qtabwidget.tabShape()}")
        self.qtabwidget.setTabShape(QtWidgets.QTabWidget.Triangular)
        #print(f" `tabShape` получает форму вкладок QTabWidget: {self.qtabwidget.tabShape()}")
        
        # Изменить положение вкладок QTabWidget
        #  с помощью метода QTabWidget.setTabPosition(TabPosition position). 
        #  position представляет позицию вкладок, по умолчанию позиция вкладок QTabWidget.North (Выше).
        # Получить положение вкладок QTabWidget, используя метод QTabWidget.tabPosition(). 
        # Этот метод возвращает TabPosition.(North  South  West   East)
        
        self.qtabwidget.setTabPosition(QtWidgets.QTabWidget.East)  
        #print(f" `tabPosition` получает положение вкладок QTabWidget: {self.qtabwidget.tabPosition()}")

        # Включить и отключить вкладки QTabWidget
        # Мы можем включить или отключить вкладку QTabWidget, 
        # используя метод QTabWidget.setTabEnabled(int index, bool enable). 
        # index представляет индекс вкладки. 
        # Если enable - True, то активируется вкладка, а если False, то отключается.
        # Мы можем узнать, включена ли вкладка, используя метод QTabWidget.isTabEnabled(int index).
        
        self.qtabwidget.setTabEnabled(0, False) # отключить вкладку
        self.qtabwidget.setTabEnabled(1, True)  # включить вкладку 
        #print(f" `isTabEnabled` включена ли вкладка(index=0): {self.qtabwidget.isTabEnabled(0)}")
        #print(f" `isTabEnabled` включена ли вкладка(index=1): {self.qtabwidget.isTabEnabled(1)}")
        
        # Получить количество вкладок QTabWidget
        # Мы можем получить количество вкладок QTabWidget, используя метод QTabWidget.count(). 
        # Этот метод возвращает int.
        print(f"\n `count` Получить количество вкладок: {self.qtabwidget.count()}")

        # Издайте сигнал currentChanged из QTabWidget
        # Сигнал QTabWidget.currentChanged(int index) генерируется при изменении индекса страницы. 
        # index представляет новый индекс текущей страницы. 
        # индекс может быть -1, если в QTabWidget нет виджета. !
        
        self.qtabwidget.currentChanged.connect(self.qtabwidget_currentchanged)
        
        # Сигнал QTabWidget.tabCloseRequested(int index) выдается при нажатии кнопки закрытия вкладки. 
        # index представляет индекс вкладки.
        # Прежде чем мы должны активировать свойство tabsClosable QTabWidget, 
        # используя метод QTabWidget.setTabsClosable(bool enable). 
        # Если enable - True, вкладки могут быть закрыты, а если False, их нельзя закрыть.
        # self.qtabwidget.tabCloseRequested.connect(self.qtabwidget_tabcloserequested)
        
        self.setCentralWidget(self.qtabwidget)
        
    # В реализации слота мы удаляем вкладку, но сначала мы удаляем виджет, который он содержит.
    @QtCore.pyqtSlot(int)
    def qtabwidget_tabcloserequested(self, index):
        """ Удаляет вкладку с указанным индексом, 
            но сначала удаляет содержащийся в ней виджет. 
        """

        # gets the widget
        widget = self.qtabwidget.widget(index)

        # if the widget exists
        if widget:
            # removes the widget
            widget.deleteLater()

        # removes the tab of the QTabWidget
        self.qtabwidget.removeTab(index)
        print(f"\n Закрыли вкладку с ииндексои: {index}")
        
    @QtCore.pyqtSlot(int)
    def qtabwidget_currentchanged(self, index):
        print(f"\n Hовый индекс текущей страницы: {index}")


if __name__ == '__main__':
    application = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setWindowTitle('QTabWidget')
    window.resize(400, 400)
    window.show()
    sys.exit(application.exec_())        

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

→ Ссылка