Я пытаюсь создать вертикальную панель вкладок в левой части моего приложения, где текст вкладки расположен горизонтально.Я нашел хороший gist для создания таких «вкладок пальца».Однако мне также нужно иметь возможность закрывать вкладки, поэтому я хотел бы иметь кнопки закрытия на каждой вкладке.Я попытался использовать setTabsClosable
, который успешно добавил кнопки закрытия на вкладки, но разместил их в центре вместо правой стороны: 
Есть ли способ позиционирования закрытиякнопка на вертикальной вкладке с горизонтальным текстом?Кажется, что в PySide есть только QTabBar.LeftSide
и QTabBar.RightSide
, которые можно установить с помощью setTabButton
.Ни один из вариантов не поможет в этом случае.
Мой код (только слегка измененный fork из этой сущности ) для примера:
Example.py:
from PyQt4 import QtGui, QtCore
from FingerTabs import FingerTabWidget, FingerTabBarWidget
import sys
app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
tabBar = FingerTabBarWidget(width=100,height=25)
tabs.setTabBar(tabBar)
digits = ['Thumb','Pointer','Rude','Ring','Pinky']
for i,d in enumerate(digits):
widget = QtGui.QLabel("Area #%s <br> %s Finger"% (i,d))
tabs.addTab(widget, d)
tabs.setTabPosition(QtGui.QTabWidget.West)
tabs.tabCloseRequested.connect(tabs.removeTab)
tabs.show()
sys.exit(app.exec_())
FingerTabs.py:
# Updated so a PyQT4 Designer TabWidget can be promoted to a FingerTabWidget
from PyQt4 import QtGui, QtCore
class FingerTabBarWidget(QtGui.QTabBar):
def __init__(self, parent=None, *args, **kwargs):
self.tabSize = QtCore.QSize(kwargs.pop('width',100), kwargs.pop('height',25))
QtGui.QTabBar.__init__(self, parent, *args, **kwargs)
self.setTabsClosable(True)
def paintEvent(self, event):
painter = QtGui.QStylePainter(self)
option = QtGui.QStyleOptionTab()
for index in range(self.count()):
self.initStyleOption(option, index)
tabRect = self.tabRect(index)
tabRect.moveLeft(10)
painter.drawControl(QtGui.QStyle.CE_TabBarTabShape, option)
painter.drawText(tabRect, QtCore.Qt.AlignVCenter |\
QtCore.Qt.TextDontClip, \
self.tabText(index));
painter.end()
def tabSizeHint(self,index):
return self.tabSize
# Shamelessly stolen from this thread:
# http://www.riverbankcomputing.com/pipermail/pyqt/2005-December/011724.html
class FingerTabWidget(QtGui.QTabWidget):
"""A QTabWidget equivalent which uses our FingerTabBarWidget"""
def __init__(self, parent, *args):
QtGui.QTabWidget.__init__(self, parent, *args)
self.setTabBar(FingerTabBarWidget(self))