2017-11-10 2 views
0

두 개의 입력 텍스트 상자가 서로 옆에 있고 싶습니다.Python : 여러 개의 QLineEdit 상자가있는 경우 (pyqt4)

하나의 텍스트 상자에 대해 코드를 복사하려고했으나 올바른 결과를 얻지 못했습니다. 하나의 텍스트 상자 만 표시됩니다.

가능하면 텍스트 상자와 함께 인라인으로 레이블을 붙이고 싶습니다.

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

코드는 두 개의 LineEdit를 생성하지만 레이아웃 문제가 있습니다. 윈도우 당 하나의 레이아웃 관리자 만있을 수 있습니다. 두 번째로 setLayout(self)을 호출하면 첫 번째 레이아웃 관리자가 제거됩니다.

둘 중 하나의 레이아웃 관리자를 다른 상자 안에 중첩시킬 수 있습니다 (BoxLayout 관리자는이 목적으로 addLayout 함수를 사용합니다).

또한 레이아웃 관리자로 move에 전화를 걸 때 어떤 일이 벌어 질지 잘 모릅니다. 나는 항상 레이아웃 관리자에게 모든 아이들의 포지셔닝을 맡겼다.

두 번째 레이아웃을 제거 했으므로 이제 두 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을 가질 수 있습니다. 레이블을 먼저 추가하고 입력 초를 추가하여 레이블이 왼쪽에 있도록하십시오. 그런 다음 전체 윈도우에 대한 기본 레이아웃 관리자를 가질 수 있으며 addLayout() 함수를 사용하여 기본 레이아웃에 각 라벨/입력 레이아웃을 추가 할 수 있습니다. addLayout 및 addWidget 함수는 위치 및 무게를 제어 할 수있는 플래그도 가져옵니다. 일단 당신이 그것에 익숙해지면, 매우 유연합니다. –

+0

당신은 락! 감사! –