<p>我无法只使用文本(而不是图标)处理<a href="https://stackoverflow.com/questions/51404102/pyqt5-tabwidget-vertical-tab-horizontal-text-alignment-left/51451128#51451128">first answer</a>,因为我的文本被剪切。
即使我能够运行<a href="https://stackoverflow.com/questions/51404102/pyqt5-tabwidget-vertical-tab-horizontal-text-alignment-left/63604503#63604503">second answer</a>,我认为这还不清楚。
所以我的答案是:<br/>
此代码使用<a href="https://stackoverflow.com/questions/51404102/pyqt5-tabwidget-vertical-tab-horizontal-text-alignment-left/63604503#63604503">second answer's code</a>定义<code>VerticalTabWidget</code>类:</p>
<pre class="lang-py prettyprint-override"><code>import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtGui, QtWidgets, QtCore
class TabBar(QTabBar):
def tabSizeHint(self, index):
s = QTabBar.tabSizeHint(self, index)
s.transpose()
return s
def paintEvent(self, event):
painter = QStylePainter(self)
opt = QStyleOptionTab()
for i in range(self.count()):
self.initStyleOption(opt, i)
painter.drawControl(QStyle.CE_TabBarTabShape, opt)
painter.save()
s = opt.rect.size()
s.transpose()
r = QtCore.QRect(QtCore.QPoint(), s)
r.moveCenter(opt.rect.center())
opt.rect = r
c = self.tabRect(i).center()
painter.translate(c)
painter.rotate(90)
painter.translate(-c)
painter.drawControl(QStyle.CE_TabBarTabLabel, opt)
painter.restore()
class VerticalTabWidget(QTabWidget):
def __init__(self, *args, **kwargs):
QTabWidget.__init__(self, *args, **kwargs)
self.setTabBar(TabBar())
self.setTabPosition(QtWidgets.QTabWidget.West)
class app_window(QMainWindow):
def __init__(self):
super().__init__()
tabs = VerticalTabWidget()
tabs.addTab(QWidget(), "First Tab")
tabs.addTab(QWidget(), "Second Tab")
tabs.addTab(QWidget(), "Third Tab")
self.setCentralWidget(tabs)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = app_window()
w.show()
sys.exit(app.exec_())
</code></pre>
<p>您只需将<code>TabBar</code>和<code>VerticalTabWidget</code>类复制到代码中,并将<code>VerticalTabWidget</code>用作任何<code>QTabWidget</code></p>