2010-08-16 5 views
0

저는 파이썬과 PyQt4를 사용하여 간단한 GUI를 만들었습니다. 사용자가 프로그램에 무엇인가를 입력하면 프로그램은 사용자의 입력 내용에 따라 UI에 특정 수의 확인란을 추가해야합니다. 테스트 목적으로, 나는 처음부터 응용 프로그램에 하나의 체크 박스가 있고 그 체크 박스는 QGroupBox 내부에 중첩 된 QVBoxLayout 안에 중첩되어 있습니다. 필자는이 모든 것을 위해 PyQt4 문서를 읽으려고 시도했지만 어떤 진전을 이루려 고 노력했다. 여기 그런PyQt4에 체크 박스를 동적으로 추가했습니다.

self.CheckboxField = QtGui.QGroupBox(self.GuiMain) 
    self.CheckboxField.setGeometry(QtCore.QRect(10, 70, 501, 41)) 
    self.CheckboxField.setObjectName("CheckboxField") 
    self.verticalLayoutWidget = QtGui.QWidget(self.CheckboxField) 
    self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 10, 491, 21)) 
    self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") 
    self.CheckboxLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget) 
    self.CheckboxLayout.setSizeConstraint(QtGui.QLayout.SetMinimumSize) 
    self.CheckboxLayout.setObjectName("CheckboxLayout") 
    self.checkBox = QtGui.QCheckBox(self.verticalLayoutWidget) 
    self.checkBox.setObjectName("checkBox") 
    self.CheckboxLayout.addWidget(self.checkBox) 

(별도의 파일에) 새로운 체크 박스를 추가하는 내 최초의 시도이다 : 여기

은 (QtCreator에서 기본 출력) I 초기 확인란을 만드는 중이라서 어떻게

checkBox1 = QtGui.QCheckBox(self.window.CheckboxField) 
    checkBox1.setGeometry(QtCore.QRect(90, 10, 70, 17)) 
    checkBox1.setText(QtGui.QApplication.translate("MainWindow", "Bob Oblaw", None, QtGui.QApplication.UnicodeUTF8)) 
    checkBox1.setObjectName("checkBox1") 
    self.window.CheckboxLayout.addWidget(checkBox1) 
    self.window.CheckboxLayout.stretch(1) 
    self.window.CheckboxField.adjustSize() 
    self.window.CheckboxField.update() 

오류가 없으며 확인란이 표시되지 않습니다.

답변

2

QtCreator의 출력 스타일을 복사하여 스스로 힘들게 만들고 있다고 생각합니다. UI가 어떻게 작동하는지 수동으로 코딩하는 것이 중요하다고 생각합니다. 레이아웃에 확인란을 추가하지 않을 것으로 판단됩니다. 이것을 시도해보십시오 (가져 오기 * 여기에 명확하게하기 위해 사용) :

 
import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 

class Window(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 

     layout = QVBoxLayout() 
     self.checks = [] 
     for i in xrange(5): 
      c = QCheckBox("Option %i" % i) 
      layout.addWidget(c) 
      self.checks.append(c) 

     self.setLayout(layout) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 

    w = Window() 
    w.show() 

    app.exec_() 
0

나는 그것을 스스로 알아 냈습니다. 그 중 일부는 내 잘못이었고 다른 부분은 약간 해킹 된 것입니다 (아마 Qt 함수를 사용하지 않았을 것입니다). 여기 내 솔루션입니다 :

  • 먼저, 나는 이것이 내가

    • 안타깝게도 윈도우 didn를 그들을 추가 할 때 그렇게 내 확인 표시가 보여주는 시작했다, 그리드 레이아웃에있는 모든 레이아웃에 필요한 '이 t은 체크 박스와 크기를 조정, 그래서 나는이 같은 함수가 그것을 해결하기 위해 쓴 :

def addCheckbox(self, name): 
     checkBox = QtGui.QCheckBox(self.window.CheckboxField) 
     self.window.CheckboxLayout.addWidget(checkBox) 
     checkBox.setText(name) 
     newHeight = self.geometry().height()+21#Compensate for new checkbox 
     self.resize(self.geometry().width(), newHeight) 
관련 문제