2017-12-16 16 views
0

スプリッタを使用して2つのタブ間でエッジを移動する場合でも、ボタンを常に2番目のタブのラベルの隣にします。それを達成する方法?私はそれが絶対位置を使用するためだと信じていますが、QTabWidgetのギャップの中でどのようにウィジェットをつけるのですか?QTabWidgetのギャップにアタッチするウィジェットを作成し、それに応じてQSplitterでpyqt5に移動する方法

from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame, 
    QSplitter, QStyleFactory, QApplication,QTabWidget,QPushButton) 
from PyQt5.QtCore import Qt 
import sys 

class Example(QWidget): 

    def __init__(self): 
     super().__init__() 

     self.initUI() 


    def initUI(self): 
     hbox = QHBoxLayout(self) 

     tab1 = QTabWidget(self) 
     tab2 = QTabWidget(self) 


     a=QWidget() 
     a.setGeometry(0,0, 40, 40) 
     tab2.addTab(a,"2") 

     splitter1 = QSplitter(Qt.Vertical) 
     splitter1.addWidget(tab1) 
     splitter1.addWidget(tab2) 
     splitter1.setSizes([100,100]) 
     hbox.addWidget(splitter1) 
     self.setLayout(hbox) 

     z=QPushButton(self) 
     z.setGeometry(100,100,70,20) 
     z.setText("button") 
     self.setGeometry(300, 300, 300, 200) 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

これは私が常に達成したいことです。

This is what I want to achieve all the time

これは、私は2つのタブ間のエッジを調整するときに何が起こったかです。あなたがウィジェットに親を追加すると、あなたが親を変更しなければならないので、

This is what happened when I adjust the edge between two tabs

答えて

1

は、ウィジェットは、親への相対座標系を持っています。親に1つの相対的にボタンの位置を調整することに加えて:

[...] 
z=QPushButton(tab2) 
z.setGeometry(100,0,70,20) 
z.setText("button") 
[...] 

でもQtabWidgetの変化の大きさならば、ボタンが中央に残っているもう一つのシリーズの改良:

class TabWidgetWithButton(QTabWidget): 
    def __init__(self, *args, **kwargs): 
     QTabWidget.__init__(self, *args, **kwargs) 
     self.button = QPushButton("button", self) 

    def resizeEvent(self, event): 
     self.button.move((self.width()-self.button.width())/2, 0) 
     QTabWidget.resizeEvent(self, event) 

class Example(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 
     hbox = QHBoxLayout(self) 
     tab1 = QTabWidget(self) 
     tab2 = TabWidgetWithButton(self) 

     a=QWidget(self) 
     tab2.addTab(a,"2") 
     splitter1 = QSplitter(Qt.Vertical) 
     splitter1.addWidget(tab1) 
     splitter1.addWidget(tab2) 
     splitter1.setSizes([100,100]) 
     hbox.addWidget(splitter1) 
     self.setLayout(hbox) 
     self.setGeometry(300, 300, 300, 200) 
     self.show() 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 
+0

をいただき、ありがとうございますあなたの素早い返信と思いやりのある答え! – user6456568

関連する問題