我正在尝试在应用程序的左侧创建一个垂直的标签栏,其中标签文本为水平。我找到了一个不错的gist用于创建此类“手指标签”。但是,我还需要能够关闭标签页,因此我希望每个标签页上都有关闭按钮。我尝试使用setTabsClosable
成功将关闭按钮添加到选项卡,但将其放置在中间位置而不是右侧:
是否可以使用水平文本在垂直选项卡上放置关闭按钮?似乎在PySide中只有QTabBar.LeftSide
并且
QTabBar.RightSide
,可以使用setTabButton
进行设置。在这种情况下,这两个选项均无济于事。
我的代码(只是对fork的this gist进行了稍微的修改),例如:
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))