2015-02-03 4 views
1

Стандартные вкладки компоновки слева направо. Все вкладки находятся неподалеку. enter image description hereQTabWidget. Как переместить одну вкладку в нужное положение?

Как изменить положение одной вкладки так, чтобы она была прикреплена к правому краю? Как это:

enter image description here

Можно ли это сделать?

+0

Это звучит как очень запутанный дизайн. Что должно произойти, если есть больше вкладок, чем может поместиться в доступное пространство? Куда заканчивается один в конце? Для меня это похоже на то, что журналы должны отображаться по-другому (возможно, в диалоговом окне). Или еще лучше избавиться от вкладок в целом и использовать панель инструментов. – ekhumoro

ответ

4

Вы можете вставить пустой виджет, перед последний, а затем отключите его и установите для него прозрачным. Это достигается тем, что вы хотите. Прикрепление примерного кода для этого.

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() 
+0

это безупречный! Меня можно подобрать до размера окна и изменить его и изменить ширину скрытого элемента. то я всегда буду выступать против правой боковой коробки – MaxKu

0

Да, вы можете установить его, используя таблицу стилей.

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_() 

Diaplay on the right

Кстати, есть также метод

self.setTabPosition(QTabWidget.East) 

это будет отображаться на Востоке enter image description here

+0

Это не то, что я хочу. Мне нужно сдвинуть вправо только одну вкладку, не все. единственный. остальное должно оставаться налево ... изображение, которое я особенно рисую, хочу получить ... – MaxKu

+0

В этом случае вы можете наследовать класс из QTabBar и перезаписать метод paintEvent, для QTabWidget вам нужно настроить настраиваемый tabBar, используя комплектTabBar –

+0

спасибо. Я просто подумал, что есть готовый способ. опять же это не так - тогда я сделаю, как вы говорите. – MaxKu

Смежные вопросы