因为pyqt在垂直选项卡选项中没有水平文本,所以我遵循这个link来实现它。 我想在左边有图标,然后是图标后面的文本,以及所选选项卡文本、非活动选项卡文本的不同颜色。下面的代码几乎可以完成它。唯一的问题是文本对齐是居中对齐。我试图更改tabRect.center(),但用left和top或right等更改它会导致崩溃
我从this link得到的注释代码使我左对齐,但它没有我添加的图标。但我无法更改非活动选项卡的文本颜色
我是python新手,无法找到解决方案。我也尝试过这个link,但它只设置背景色。也尝试使用此选项setTabTextColor link,但由于某些原因,它不起作用。从2天开始一直在尝试
每当我尝试使用带有注释代码的样式表设置文本颜色时,“颜色”选项在样式表中就不起作用。有什么办法可以做到这一点吗?谢谢
from PyQt5 import QtCore, QtGui, QtWidgets
class TabBar(QtWidgets.QTabBar):
def tabSizeHint(self, index):
s = QtWidgets.QTabBar.tabSizeHint(self, index)
s.transpose()
return s
def paintEvent(self, event):
painter = QtWidgets.QStylePainter(self)
opt = QtWidgets.QStyleOptionTab()
for i in range(self.count()):
self.initStyleOption(opt, i)
painter.drawControl(QtWidgets.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(QtWidgets.QStyle.CE_TabBarTabLabel, opt)
painter.restore()
# for i in range(self.count()):
# self.initStyleOption(opt, i)
# c = self.tabRect(i)
# c.moveLeft(35)
# painter.drawControl(QtWidgets.QStyle.CE_TabBarTabShape, opt)
# # painter.setPen(QColor(255, 255, 255))
# painter.drawText(c, QtCore.Qt.AlignVCenter | QtCore.Qt.TextDontClip, self.tabText(i))
# if i == 0:
# painter.drawImage(QtCore.QRectF(8, 8, 20, 20), QtGui.QImage("images/logo.png"))
# if i == 1:
# painter.drawImage(QtCore.QRectF(8, 44, 20, 20), QtGui.QImage("images/data.png"))
# if i == 2:
# painter.drawImage(QtCore.QRectF(8, 82, 20, 20), QtGui.QImage("images/browse.png"))
# if i == 3:
# painter.drawImage(QtCore.QRectF(8, 120, 20, 20), QtGui.QImage("images/off.png"))
# if i == 4:
# painter.drawImage(QtCore.QRectF(8, 158, 20, 20), QtGui.QImage("images/cal.png"))
# if i == 5:
# painter.drawImage(QtCore.QRectF(8, 196, 20, 20), QtGui.QImage("images/fol.png"))
# if i == 6:
# painter.drawImage(QtCore.QRectF(8, 232, 20, 20), QtGui.QImage("images/exc.png"))
# painter.end()
class TabWidget(QtWidgets.QTabWidget):
def __init__(self, *args, **kwargs):
QtWidgets.QTabWidget.__init__(self, *args, **kwargs)
self.setTabBar(TabBar(self))
self.setTabPosition(QtWidgets.QTabWidget.West)
我无法只使用文本(而不是图标)处理first answer,因为我的文本被剪切。 即使我能够运行second answer,我认为这还不清楚。 所以我的答案是:
此代码使用second answer's code定义
VerticalTabWidget
类:您只需将
TabBar
和VerticalTabWidget
类复制到代码中,并将VerticalTabWidget
用作任何QTabWidget
解决方案是使用
QProxyStyle
重定向文本绘制:如果您以前在QtDesigner中设计过任何选项卡。 例如,我在QtDesigner中设计了此选项卡:
现在我已经从ui文件生成了py文件,ui文件如下所示:
根据eyllanesc的回答,我找到了如何垂直添加选项卡的方法,并将预先存在的第一个选项卡添加到修改后的tabwidget中,如下所示:
现在我的窗口如下所示:
我希望这将解决许多人的问题,他们直接想重新创建他们的tabwidget
相关问题 更多 >
编程相关推荐