QTabWidget。如何将一个标签移动到正确的位置?

Posted

技术标签:

【中文标题】QTabWidget。如何将一个标签移动到正确的位置?【英文标题】:QTabWidget. How to move one tab to right position? 【发布时间】:2015-02-03 09:49:59 【问题描述】:

从左到右的标准布局选项卡。所有标签都在附近。

如何更改一个标签的位置,使其附加到右边缘?像这样:

可以吗?

【问题讨论】:

这听起来像是一个非常令人困惑的设计。如果选项卡的数量超出了可用空间的容量,应该怎么办?最后的那个去哪了?对我来说,看起来日志应该以不同的方式显示(可能在对话框中)。或者,更好的是,完全摆脱标签,使用工具栏。 【参考方案1】:

您可能希望在最后一个小部件之前插入一个空小部件,然后禁用它并将其设置为透明。 这达到了你想要的。附上一个示例代码。

from PyQt4 import QtGui
import sys

def main():

    app     = QtGui.QApplication(sys.argv)
    tabW    = QtGui.QTabWidget()
    tabW.setStyleSheet("QTabBar::tab:disabled "+\
                        "width: 300px;"+\
                        "color: transparent;"+\
                        "background: transparent;")
    pushButton1 = QtGui.QPushButton("QPushButton 1")
    pushButton2 = QtGui.QPushButton("QPushButton 2")

    tab1    = QtGui.QWidget()    
    tab2    = QtGui.QWidget()
    emptySpace = QtGui.QWidget()
    tab3    = QtGui.QWidget()

    vBoxlayout    = QtGui.QVBoxLayout()
    vBoxlayout.addWidget(pushButton1)
    vBoxlayout.addWidget(pushButton2)

    #Resize width and height
    tabW.resize(500, 500)


    #Set Layout for Third Tab Page
    tab3.setLayout(vBoxlayout)   

    tabW.addTab(tab1,"Tab 1")
    tabW.addTab(tab2,"Tab 2")
    tabW.addTab(emptySpace,"ES")
    tabW.setTabEnabled(2,False)
    tabW.addTab(tab3,"Tab 3")

    tabW.setWindowTitle('PyQt QTabWidget Add Tabs and Widgets Inside Tab')
    tabW.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

【讨论】:

太完美了!我可以拾取到窗口的大小并更改它并更改隐藏元素的宽度。那么我的 tab 会一直靠在右边的框上【参考方案2】:

是的,您可以使用样式表进行设置。

from PyQt4.QtGui import *


style = """QTabWidget::tab-bar
    alignment: right;
"""


class MyWidget(QTabWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.mW1 = QWidget(self)
        self.mW2 = QWidget(self)
        self.addTab(self.mW1, "w1")
        self.addTab(self.mW2, "w2")
        self.setStyleSheet(style)


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    app.exec_()

对了,还有一个方法

self.setTabPosition(QTabWidget.East)

这将显示在东

【讨论】:

这不是我想要的。我要右移的只有一个标签,不是全部。只有一个。其余的必须留在左边......我特别想得到的图片...... 这种情况下,你可以继承QTabBar的类并覆盖paintEvent方法,对于QTabWidget,你需要使用setTabBar设置自定义的tabBar 谢谢。我只是认为有一个现成的方法。又不是——那我就照你说的做。

以上是关于QTabWidget。如何将一个标签移动到正确的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 QTabWidget 中的一个选项卡设置为在 Qt 中不可移动?

如何使用 QPushButton 在现有 QTabWidget 上添加“新选项卡”

如何在 QTabWidget Stretch 中制作标签以避免滚动

如何设置 QTabWidget 的标签栏长度?

如何访问 QTabWidget 不同选项卡中的小部件?

动态添加 QTableView 到动态创建的标签页 (QTabWidget) [已解决]