我有一个使用python和PyQt4构建的简单GUI。用户在程序中输入内容后,程序应根据用户输入的内容向UI添加一定数量的复选框。出于测试目的,我从应用程序开始就有一个复选框,该复选框嵌套在QVBoxLayout内,QVBoxLayout嵌套在QGroupBox中。我已经尝试阅读所有这些的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()
没有错误,复选框没有显示。
答案 0 :(得分: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_()
答案 1 :(得分:0)
我最终自己搞清楚了。部分原因是我的错,另一部分是有点hacky(因为它可能没有使用它可能正在使用的Qt功能)。这是我的解决方案:
首先,我需要将所有内容都放在网格布局上,这样就可以在我添加它们时显示我的复选标记
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)