PySide6 Закрытие вкладки на среднюю кнопку мыши
Необходимо, чтобы вкладки закрывались не только по кнопке, но и при клике на вкладку средней кнопкой мыши.
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow, QTabWidget
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("TabWidget")
self.tabWidget = QTabWidget()
self.tabWidget.setTabsClosable(True)
self.tabWidget.tabCloseRequested.connect(self.close_tab)
self.tabWidget.addTab(QLabel('widget 1'), 'tab 1')
self.tabWidget.addTab(QLabel('widget 2'), 'tab 2')
self.tabWidget.addTab(QLabel('widget 3'), 'tab 3')
self.setCentralWidget(self.tabWidget)
def close_tab(self, index):
self.tabWidget.widget(index).deleteLater()
self.tabWidget.removeTab(index)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.resize(640, 480)
window.show()
app.exec()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант, пробуйте:
import sys
'''
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow, QTabWidget
'''
from PyQt5.Qt import *
class TabBar(QTabBar): # !!!
mousePressSignal = pyqtSignal(int) # !!! PyQt5
# mousePressSignal = Signal(int) # !!! PySide6
def __init__(self, *args, **kwargs):
super(TabBar, self).__init__(*args, **kwargs)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
super(TabBar, self).mousePressEvent(event)
elif event.button() == Qt.MiddleButton: # !!!
#int QTabBar::tabAt(const QPoint &position) const
position = self.tabAt(event.pos())
self.mousePressSignal.emit(position) # !!!
class TabWidget(QTabWidget): # !!!
def __init__(self, *args, **kwargs):
super(TabWidget, self).__init__(*args, **kwargs)
self.tabBar = TabBar(self) # !!!
self.setTabBar(self.tabBar)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("TabWidget")
self.tabWidget = TabWidget()
self.tabWidget.setTabsClosable(True)
self.tabWidget.tabCloseRequested.connect(self.close_tab)
self.tabWidget.addTab(QLabel('Widget 1'), 'Tab 1')
self.tabWidget.addTab(QLabel('Widget 2'), 'Tab 2')
self.tabWidget.addTab(QLabel('Widget 3'), 'Tab 3')
self.tabWidget.tabBar.mousePressSignal.connect(self.close_tab) # !!!
self.setCentralWidget(self.tabWidget)
def close_tab(self, index):
self.tabWidget.widget(index).deleteLater()
self.tabWidget.removeTab(index)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.resize(640, 480)
window.show()
sys.exit(app.exec())

