2

この正確な問題をどこにも見つけていないか、他の人から認識していないだけかもしれません。まだプログラミングの初心者ですが、完全に忘れているわけではありません。私は PyQt5 でアプリケーションを作成しようとしていますが、将来より深刻なコーディングを行う前に、レイアウトを適切に設定するのに問題があります。

ご覧のとおり、QHBoxLayout を使用してメイン レイアウトを実行しようとしています。その中に 2 つの QVBoxLayout レイアウトがあります。各垂直レイアウトにいくつかのランダムなウィジェットを投入しました。これらは、固定サイズを指定する場合を除いて、単独で完全に機能します。左の垂直レイアウトの ListWidget と LineEdit は、固定幅/高さ/サイズが指定されている場合、写真に見られるようにアプリのウィンドウのサイズを手動で変更すると、希望する場所または希望する方法にとどまりません。明らかに、それらを左上隅に置き、後続のウィジェットを最初、2番目などのすぐ下に置いておきたいと思います。同じものを適用しようとすると、tabswidgetでも同じことが起こります。

ジオメトリ、サイズヒント、アライメントなどをいじりましたが、理解できないようです。問題の 2 つの写真へのリンクを同封します。

リサイズ前

リサイズ後

そして、コードの重要な部分を囲みます:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUI()
        self.createactions()
        self.createmenus()
        self.createtoolbar()
        self.container = FrameContainer()
        self.setCentralWidget(self.container)



    def initUI(self):

        self.setWindowTitle(self.title)
        self.setGeometry(100,100,800,600)
        self.statusBar().showMessage("Statusbar - awaiting user control")
        self.show()



class FrameContainer(QWidget):

    def __init__(self):
        super(QWidget, self).__init__()
        self.setContentsMargins(0,0,0,0)
        self.mainlayout = QHBoxLayout(self)
        self.mainlayout.setSpacing(0)
        self.mainlayout.setContentsMargins(0, 0, 0, 0)
        self.verticalwidgets()

        self.mainlayout.addLayout(self.box_layout1)
        self.mainlayout.addLayout(self.box_layout2)


    def verticalwidgets(self):
        # Left side
        self.box_layout1 = QVBoxLayout()
        self.box_layout1.setContentsMargins(0,0,0,0)
        self.box_layout1.setSpacing(0)
        self.list_widget = QListWidget()
        self.list_widget.setFixedSize(200,500)
        self.list_widget.sizeHintForColumn(0)
        self.someWidget3 = QLineEdit()
        self.someWidget3.setFixedWidth(200)
        self.box_layout1.addWidget(self.list_widget, Qt.AlignLeft)
        self.box_layout1.addWidget(self.someWidget3, Qt.AlignLeft)

        # Right side
        self.box_layout2 = QVBoxLayout()
        self.box_layout2.setContentsMargins(0,0,0,0)
        self.box_layout2.setGeometry(QRect(0, 0, 800, 680))
        self.tabs_widget = TabsWidget(self)
        self.box_layout2.addWidget(self.tabs_widget)


class TabsWidget(QWidget):

    def __init__(self, child):
        super(QWidget, self).__init__()
        self.layout = QHBoxLayout(self)
        self.layout.setContentsMargins(0,0,0,0)


        self.tabs = QTabWidget()
        self.tabs.setTabsClosable(True)
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()

        # Add tabs
        self.tabs.addTab(self.tab1, "Tab 1")
        self.tabs.addTab(self.tab2, "Tab 2")
        self.tabs.addTab(self.tab3, "Tab 3")

        # Create first tab
        self.tab1.layout = QVBoxLayout(self)
        self.pushButton1 = QPushButton("Button 1")
        self.pushButton2 = QPushButton("Button 2")
        self.pushButton3 = QPushButton("Button 3")
        self.tab1.layout.addWidget(self.pushButton1)
        self.tab1.layout.addWidget(self.pushButton2)
        self.tab1.layout.addWidget(self.pushButton3)
        self.tab2.layout = QVBoxLayout(self)
        self.tab2.layout.addWidget(QLabel("Peterpaned"))
        self.tab2.layout.addWidget(QLineEdit())
        self.tab1.setLayout(self.tab1.layout)
        self.tab2.setLayout(self.tab2.layout)

        # Add tabs to widget
        self.layout.addWidget(self.tabs)

私は何を間違っていますか?必ずしもコードの回答を提供する必要はありません。その気がない限り、正しい方向への真剣なナッジが必要だと思います。または、少なくともそうなることを願っています。

4

1 に答える 1

1

レイアウトにスペーサー (配置する場所に応じて水平または垂直) を追加し、非固定サイズ ポリシーを設定できます。この方法では、ウィンドウのサイズが変更されるたびに、スペーサーのみが伸びます (または短くなります)。

于 2016-10-13T21:49:00.687 に答える