QTabWidget на некоторых вкладках есть кнопка закрытия, а на некоторых вкладках нет кнопки закрытия - PullRequest
2 голосов
/ 26 февраля 2020

Я создаю QTabWidget, и я установил для True его метод setTabsClosable, чтобы на каждой вкладке была кнопка закрытия. Эффект, который я хочу, заключается в том, что на первой вкладке нет кнопки закрытия, а на второй - кнопка закрытия. Как мне его установить?

from PyQt4.QtGui import QTabWidget, QLabel, QHBoxLayout
import sys

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def create_tab(self):
        self.tab = QTabWidget()
        self.tab.tabCloseRequested.connect(self.delete)
        self.tab.setTabsClosable(True)

        self.tab.addTab(QLabel('a'), 'a')
        self.tab.addTab(QLabel('b'), 'b')

    def initUI(self):
        self.create_tab()

        h = QtGui.QHBoxLayout()
        self.setLayout(h)
        h.addWidget(self.tab)
        self.setGeometry(100, 100, 500, 500)
        self.show()

    def delete(self, index):
        self.tab.removeTab(index)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 26 февраля 2020

Одним из возможных решений является удаление кнопок после настройки вкладок:

def create_tab(self):
    self.tab = QtGui.QTabWidget()
    self.tab.tabCloseRequested.connect(self.delete)
    self.tab.setTabsClosable(True)

    self.tab.addTab(QtGui.QLabel("a"), "a")
    self.tab.addTab(QtGui.QLabel("b"), "b")

    default_side = self.tab.style().styleHint(
        QtGui.QStyle.SH_TabBar_CloseButtonPosition, None, self.tab.tabBar()
    )
    for i in (0,): # indexes of the buttons to remove
        <b>self.tab.tabBar().setTabButton(i, default_side, None)</b>
...