Показать кнопку закрытия (x) после ее скрытия (QTabBar) - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю метод, чтобы скрыть и показать кнопку закрытия вкладки.Я нашел способ скрыть это.Однако я не знаю, как сделать это в обратном порядке.

Это мой существующий код для сокрытия кнопки закрытия.Используя те же строки кодов, как я могу показать кнопку закрытия вкладки?

    def disable_close_button(self):
        self.ui.tab_widget.tabBar().setTabButton(self.current_index(), QTabBar.RightSide, None)

    def enable_close_button(self):
        pass

Заранее спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Вы не скрываете кнопку, вы уничтожаете ее.Поэтому в моем решении я получаю кнопку, а затем скрываю ее или показываю по мере необходимости.

import sys
from PyQt5 import QtCore, QtWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        show_button = QtWidgets.QPushButton(
            text="show",
            clicked=self.enable_close_button
        )
        hide_button = QtWidgets.QPushButton(
            text="hide",
            clicked=self.disable_close_button 
        )
        self.tab_widget = QtWidgets.QTabWidget(tabsClosable=True)
        for i in range(4):
            label = QtWidgets.QLabel(
                text="label {}".format(i),
                alignment=QtCore.Qt.AlignCenter
            )
            self.tab_widget.addTab(label , "tab-{}".format(i))
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(show_button)
        lay.addWidget(hide_button)
        lay.addWidget(self.tab_widget)

    @QtCore.pyqtSlot()
    def enable_close_button(self):
        ix = self.tab_widget.currentIndex()
        button = self.tab_widget.tabBar().tabButton(ix, QtWidgets.QTabBar.RightSide)
        if button is not None: 
            button.show()

    @QtCore.pyqtSlot()
    def disable_close_button(self):
        ix = self.tab_widget.currentIndex()
        button = self.tab_widget.tabBar().tabButton(ix, QtWidgets.QTabBar.RightSide)
        if button is not None: 
            button.hide()

if __name__ == '__main__':
    app = QtWidgets.QApplication.instance()
    if app is None:
        app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    w = Widget()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())
...