2010-08-16 79 views
0

我有一个使用python和PyQt4构建的简单GUI。用户在程序中输入内容后,程序应该根据用户输入的内容,在UI中添加一定数量的复选框。出于测试目的,我有一个复选框从开始存在于应用程序中,并且该复选框嵌套在嵌套在QGroupBox内的QVBoxLayout中。我已经尝试通过PyQt4文档阅读所有这些内容,但我一直在努力取得进展。用PyQt4动态添加复选框

这里是我想提出的初始复选框(从QtCreator基本输出):

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) 

当年这里是我添加一个新的复选框(在一个单独的文件)的初步尝试:

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函数)。这里是我的解决方案:

  • 首先,我需要的一切奠定了在网格布局,这使得它,所以我查马克开始出现了,当我加入他们

    • 可悲的是,窗口没“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)