python居中_如何在QTabBar中居中图标?

一种可能的解决方案是使用QProxyStyle在您想要的位置绘制图标:from PyQt5 import QtCore, QtGui, QtWidgets

class TabBarStyle(QtWidgets.QProxyStyle):

def drawControl(self, element, option, painter, widget=None):

icon = QtGui.QIcon()

if element == QtWidgets.QStyle.CE_TabBarTabLabel:

icon = QtGui.QIcon(option.icon)

# draw without icon

option.icon = QtGui.QIcon()

super(TabBarStyle, self).drawControl(element, option, painter, widget)

if icon.isNull():

return

verticalTabs = option.shape in (

QtWidgets.QTabBar.RoundedEast,

QtWidgets.QTabBar.RoundedWest,

QtWidgets.QTabBar.TriangularEast,

QtWidgets.QTabBar.TriangularWest,

)

alignment = QtCore.Qt.AlignCenter | QtCore.Qt.TextShowMnemonic

if not self.proxy().styleHint(

QtWidgets.QStyle.SH_UnderlineShortcut, option, widget

):

alignment |= QtCore.Qt.TextHideMnemonic

if verticalTabs:

painter.save()

if option.shape in (

QtWidgets.QTabBar.RoundedEast,

QtWidgets.QTabBar.TriangularEast,

):

newX = tr.width() + tr.x()

newY = tr.y()

newRot = 90

else:

newX = tr.x()

newY = tr.y() + tr.height()

newRot = -90

m = QtCore.QTransform.fromTranslate(newX, newY)

m.rotate(newRot)

p.setTransform(m, True)

tr = self.proxy().subElementRect(

QtWidgets.QStyle.SE_TabBarTabText, option, widget

)

fm = QtGui.QFontMetrics(painter.font())

iconRect = fm.boundingRect(option.text)

iconSize = QtCore.QSize(option.iconSize)

if not iconSize.isValid():

iconExtent = self.proxy().pixelMetric(

QtWidgets.QStyle.PM_SmallIconSize

)

iconSize = QtCore.QSize(iconExtent, iconExtent)

tabIconSize = icon.actualSize(

iconSize,

QtGui.QIcon.Normal

if (option.state & QtWidgets.QStyle.State_Enabled)

else QtGui.QIcon.Disabled,

QtGui.QIcon.On

if (option.state & QtWidgets.QStyle.State_Selected)

else QtGui.QIcon.Off,

)

# High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize

iconSize = QtCore.QSize(

min(tabIconSize.width(), iconSize.width()),

min(tabIconSize.height(), iconSize.height()),

)

offset = 10

iconRect.moveCenter(

tr.center() - QtCore.QPoint(iconSize.width() + offset, 0)

)

tabIcon = icon.pixmap(

widget.window().windowHandle() if widget else None,

option.iconSize,

QtGui.QIcon.Normal

if (option.state & QtWidgets.QStyle.State_Enabled)

else QtGui.QIcon.Disabled,

QtGui.QIcon.On

if (option.state & QtWidgets.QStyle.State_Selected)

else QtGui.QIcon.Off,

)

painter.drawPixmap(iconRect.x(), iconRect.y(), tabIcon)

if verticalTabs:

painter.restore()

然后你把它放在QTabBar上:

^{pr2}$

huX8F.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QTabWidget可以通过setTabIcon()方法来设置tabbar图标。该方法需要传入一个QIcon对象作为参数,可以使用QIcon的fromTheme()方法来从系统主题获取图标,也可以使用QPixmap或QImage来创建自定义图标。例如: ```python tabWidget.setTabIcon(, QIcon.fromTheme("document-save")) tabWidget.setTabIcon(1, QIcon(QPixmap("my_icon.png"))) ``` ### 回答2: QTabWidget是Qt一个非常常用的用来实现选项卡的控件类,它可以帮我们方便快捷地实现选项卡,并且还可以通过设置tabbar图标来增强选项卡的视觉效果。 在QTabWidget设置tabbar图标是非常简单的,我们可以通过调用QTabWidget的tabBar()方法来获取其选项卡栏的QTabBar对象,然后再通过调用QTabBar的setTabIcon()方法为其设置相应的图标即可。 例如,我们可以通过以下代码来为QTabWidget的第一个选项卡设置一个名为“home.png”的图标: ```cpp QTabWidget *tabWidget = new QTabWidget(this); QTabBar *tabBar = tabWidget->tabBar(); tabBar->setTabIcon(0, QIcon(":/images/home.png")); ``` 注意,这里的“:/images/home.png”是一个资源文件路径,也可以是任何其他支持的图像文件路径。 除了设置tabbar图标外,我们还可以通过调用QTabBar的其他方法来对选项卡栏进行进一步的自定义,例如设置字体、颜色、以及选项卡上的提示信息等。 总之,QTabWidget是一个非常实用的控件类,它可以让我们很方便地实现选项卡,并且还支持多种自定义操作,如设置tabbar图标等。若您需要在项目实现选项卡效果,不妨试试QTabWidget吧! ### 回答3: QTabWidget是QT框架常用来实现选项卡页面效果的类,通过在QTabWidget添加多个QWidget,就可以在不同页面显示不同的内容。通常情况下,QTabWidget的tab bar(选项卡栏)只包含文本标签,但是如果需要更加丰富和个性化的界面效果,可以利用QTabBar自定义tab bar的外观和行为,比如设置tab bar图标。 在QTabWidget,每个tab bar的标签都是一个QTabBar的QTabButton,通过QTabButton的setDefaultIcon、setIcon和setTabButton等接口来设置图标。 首先,可以通过setCornerWidget函数来在tab bar的右上角添加一个PushButton作为功能按钮,其QPushButton可以通过setIcon函数添加需要的图标。 ```cpp QPushButton* button = new QPushButton(this); button->setIcon(QIcon(":/icons/settings.png")); ui->tabWidget->setCornerWidget(button, Qt::TopRightCorner); ``` 接下来,可以通过setTabButton函数来设置每个选项卡的图标,需要提供选项卡的index和一个QWidget或QIcon作为图标。 ```cpp ui->tabWidget->setTabButton(0, QTabBar::LeftSide, new QLabel(QIcon(":/icons/first.png"), "First")); ``` 需要注意的是,setTabButton函数在设置完成后并不会将该QWidget或QIcon对象加入到tab bar,需要手动进行管理。如果需要移除某个选项卡的图标,可以使用setTabButton函数重新设置为空。 ```cpp ui->tabWidget->setTabButton(0, QTabBar::LeftSide, nullptr); ``` 当然,也可以通过QTabBar自定义整个tab bar的外观和行为,更加灵活地满足需求。 综上所述,QTabWidget提供了多种接口和方式来设置选项卡标签和图标,开发者可以根据具体需求自由选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值