2010-08-16 80 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)