2017-05-28 19 views
0

私は私の窓のために、このレイアウトをしたい:だから、私は3つのボタンを配置するQHBoxLayoutレイアウトを作成し、QVBoxLayoutに追加しようとしたpyqt4でレイアウトQHBoxLayoutとQVBoxLayoutを整列する方法は?

enter image description here

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 

     title = QtGui.QLabel('Title') 
     author = QtGui.QLabel('Author') 
     other = QtGui.QLabel('Other') 

     titleEdit = QtGui.QLineEdit() 

     horizontalLayout = QtGui.QHBoxLayout(self) 
     horizontalLayout.addWidget(title) 
     horizontalLayout.addWidget(author) 
     horizontalLayout.addWidget(other) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addWidget(titleEdit) 
     verticalLayout.addWidget(horizontalLayout) 

     self.setLayout(verticalLayout) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('Review') 
     self.show() 

def main(): 

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


if __name__ == '__main__': 
    main() 

しかし、別のレイアウトを受け入れていません:

verticalLayout.addWidget(horizontalLayout) 
TypeError: addWidget(self, QWidget, stretch: int = 0, alignment: Qt.Alignment = 0): argument 1 has unexpected type 'QHBoxLayout' 

これを行う方法は? addLayout()を使用してG.M.コメント@ことで


更新

は、私は、コンソール上でこの警告だ:

QLayout: Attempting to add QLayout "" to Example "", which already has a layout 
QLayout::addChildLayout: layout "" already has a parent 
QWidget::setLayout: Attempting to set QLayout "" on Example "", which already has a layout 

をしかし、今のウィンドウが編集ボックスなしで表示されていました:

enter image description here

enter image description here

+0

あなたは 'QVBoxLayout :: addWidget'に' QLayout'を渡すことはできません。代わりに 'QVBoxLayout :: addLayout'を使用してください。 –

+0

@Thanksだが、今は '' QLayoutを設定しようとしている ""という警告を出している。 – user

+0

私は間違った行を変更したと思います。 'verticalLayout.addWidget(horizo​​ntalLayout)'を 'verticalLayout.addLayout(horizo​​ntalLayout)'に変更する必要があります。 –

答えて

1

あなたが親としての自己を持っているので、あなたの更新に表示問題が生成され、これはそのウィジェットに配置され、簡単な解決策はへの変更である:

horizontalLayout = QtGui.QHBoxLayout() 

完全なコード:

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

    def initUI(self) 
     title = QtGui.QLabel('Title') 
     author = QtGui.QLabel('Author') 
     other = QtGui.QLabel('Other') 

     titleEdit = QtGui.QLineEdit() 

     horizontalLayout = QtGui.QHBoxLayout() 
     horizontalLayout.addWidget(title) 
     horizontalLayout.addWidget(author) 
     horizontalLayout.addWidget(other) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addLayout(horizontalLayout) 

     verticalLayout.addWidget(titleEdit) 


     self.setLayout(verticalLayout) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('Review') 
     self.show() 

def main(): 

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

enter image description here

もう一つの問題はほかに、あなたがボタンについて話すということですグラフがほぼ正方形のディメンションのウィジェットを表示していることを確認したい場合は、QTextEditを使用する必要があります。

完全なコード:

#!/usr/bin/python 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 

     title = QtGui.QPushButton('Title') 
     author = QtGui.QPushButton('Author') 
     other = QtGui.QPushButton('Other') 

     titleEdit = QtGui.QTextEdit() 

     horizontalLayout = QtGui.QHBoxLayout() 
     horizontalLayout.addWidget(title) 
     horizontalLayout.addWidget(author) 
     horizontalLayout.addWidget(other) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addLayout(horizontalLayout) 

     verticalLayout.addWidget(titleEdit) 


     self.setLayout(verticalLayout) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('Review') 
     self.show() 

def main(): 

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


if __name__ == '__main__': 
    main() 

enter image description here

+0

ありがとうございました。ボタンの代わりにラベルを使用したのは、コピーして簡単な例を作成した最初のものだったからです。レイアウト・フォーマットを組み合わせた要素を置くことはできません。 – user

関連する問題