2017-11-10 21 views
0

2つの入力テキストボックスを隣り合わせにしたいとします。Python:複数のQLineEditボックス(pyqt4)を持つ

1つのテキストボックスのコードをコピー/ペーストしようとしましたが、適切な結果が得られていません。 1つのテキストボックスのみが表示されます。

可能であれば、ラベルをテキストボックスとともにインラインで表示したいと考えています。

class UI_central(QtGui.QDialog): 

def __init__(self, parent=None): 
    super(UI_central, self).__init__(parent) 

    """ 
    Input box for stock name 
    """ 
    label1 = QtGui.QLabel('Stock', self) 
    label1.move(50, 0) 

    self.line_edit = QtGui.QLineEdit() 
    self.line_edit.setText("Stock name") 

    hbox = QtGui.QHBoxLayout() 
    hbox.addWidget(self.line_edit) 
    self.setLayout(hbox) 

    """ 
    Input box for stock amount 
    """ 
    label2 = QtGui.QLabel('How Many?', self) 
    label2.move(100, 0) 

    self.line_edit2 = QtGui.QLineEdit() 
    self.line_edit2.setText("Stock amount") 

    hbox2 = QtGui.QHBoxLayout() 
    hbox2.addWidget(self.line_edit2) 
    self.setLayout(hbox2)   

    """ 
    Push buttons 
    """ 
    submit_button = QtGui.QPushButton("Submit") 
    clear_button = QtGui.QPushButton("Clear") 

    hbox.addWidget(submit_button) 
    hbox.addWidget(clear_button) 

    self.connect(submit_button, QtCore.SIGNAL("clicked()"), 
       self.submit) 

    self.connect(clear_button, QtCore.SIGNAL("clicked()"), 
       self.clear) 
    return 

def submit(self): 
    str = self.line_edit.text() 
    # check str before doing anything with it! 
    print(str) 

def clear(self): 
    print ("cleared") 
    self.line_edit.setText("") 

答えて

1

コードでは2つのラインエディットが作成されますが、レイアウトに問題があります。ウィンドウごとに1つのレイアウトマネージャしか存在できません。 setLayout(self)への2回目の呼び出しで、最初のレイアウトマネージャが削除されます。

ところで、レイアウトマネージャを別のレイアウトマネージャにネストすることができます(BoxLayoutマネージャには、この目的のために関数addLayoutがあります)。

また、moveへのコールをレイアウトマネージャーと混在させるとどうなるかわかりません。私はいつも、レイアウトマネージャーにすべての子供の配置を担当させました。

2番目のレイアウトを削除したので、両方のLineEditsが表示されるようになりました。

class UI_central(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(UI_central, self).__init__(parent) 

     """ 
     Input box for stock name 
     """ 
     label1 = QtGui.QLabel('Stock', self) 
     label1.move(50, 0) 

     self.line_edit = QtGui.QLineEdit() 
     self.line_edit.setText("Stock name") 

     hbox = QtGui.QHBoxLayout() 
     hbox.addWidget(self.line_edit) 
     self.setLayout(hbox) 

     """ 
     Input box for stock amount 
     """ 
     label2 = QtGui.QLabel('How Many?', self) 
     label2.move(100, 0) 

     self.line_edit2 = QtGui.QLineEdit() 
     self.line_edit2.setText("Stock amount") 

     hbox.addWidget(self.line_edit2) 

     """ 
     Push buttons 
     """ 
     submit_button = QtGui.QPushButton("Submit") 
     clear_button = QtGui.QPushButton("Clear") 

     hbox.addWidget(submit_button) 
     hbox.addWidget(clear_button) 

     self.connect(submit_button, QtCore.SIGNAL("clicked()"), 
       self.submit) 

     self.connect(clear_button, QtCore.SIGNAL("clicked()"), 
       self.clear) 

def submit(self): 
    str = self.line_edit.text() 
    # check str before doing anything with it! 
    print(str) 

def clear(self): 
    print ("cleared") 
    self.line_edit.setText("") 
+0

ありがとう@Paul Cornelius !! ラベルを入力ボックスの左側に移動する方法を知っていますか? –

+0

ラベル/入力ペアごとに別々のHBoxLayoutを設定できます。ラベルを最初に追加し、入力を2番目に追加して、ラベルが左側になるようにします。次に、ウィンドウ全体のメインレイアウトマネージャを作成し、addLayout()関数を使用してメインレイアウトに各ラベル/入力レイアウトを追加することができます。 addLayout関数とaddWidget関数は、位置と重量を制御するためのフラグも取ります。一度あなたがそれを取得すると、それは非常に柔軟です。 –

+0

ロック!ありがとう! –

関連する問題