Python 嵌套布局。。。绘制堆叠而非分层
好的。。。我错过了。我正在尝试创建一个对话框,该对话框有一个GridLayout,其中有许多复选框,下面是一个HBoxLayout中的接受、关闭按钮。但是在下面的代码中,我看到的只是HBoxLayout之上的GridLayout。为什么?如何将对话框尺寸标注为GridLayout的宽度Python 嵌套布局。。。绘制堆叠而非分层,python,qt,pyqt,Python,Qt,Pyqt,好的。。。我错过了。我正在尝试创建一个对话框,该对话框有一个GridLayout,其中有许多复选框,下面是一个HBoxLayout中的接受、关闭按钮。但是在下面的代码中,我看到的只是HBoxLayout之上的GridLayout。为什么?如何将对话框尺寸标注为GridLayout的宽度 class CheckerDialog(QtGui.QDialog) : def __init__(self, parent, headers) : super(CheckerDialo
class CheckerDialog(QtGui.QDialog) :
def __init__(self, parent, headers) :
super(CheckerDialog, self).__init__(parent)
checksLayout = QtGui.QGridLayout()
self.cbList = []
i = 0
for y in range(13):
for x in range (9):
if i == len(headers) : break
cb = QtGui.QCheckBox(headers[i], self)
cb.move(OFFSET_X + SPACER_X*x, OFFSET_Y + SPACER_Y*y)
self.cbList.append(cb)
i += 1
buttonLayout = QtGui.QHBoxLayout()
applyButton = QtGui.QPushButton("Apply")
closeButton = QtGui.QPushButton("Close")
buttonLayout.addWidget(applyButton)
buttonLayout.addWidget(closeButton)
self.connect(applyButton, QtCore.SIGNAL('clicked()'), self._apply)
self.connect(closeButton, QtCore.SIGNAL('clicked()'), self.close)
checkerLayout = QtGui.QVBoxLayout()
checkerLayout.addLayout(buttonLayout)
checkerLayout.addLayout(checksLayout)
HBoxLayout位于GridLayout的顶部,而不是下方。
是的,它应该在你的代码中。序列在代码中有作用
checkerLayout.addLayout(buttonLayout) # <- TOP
checkerLayout.addLayout(checksLayout) # <- BOTTOM
GridLayout的大小并不控制
总体布局,,
是的,它应该再次出现在您的代码中。因为您没有在QGridLayout中放置复选框。您只需在根布局上设置几何图形,而不是QGridLayout。请使用QGridLayout.addWidget self、QWidget、int行、int列、Qt.Alignment Alignment=0添加小部件指定索引x、y
小例子:
import sys
from PyQt4 import QtGui
class QCheckerDialog (QtGui.QDialog):
def __init__ (self, parent = None) :
super(QCheckerDialog, self).__init__(parent)
checkBoxQGridLayout = QtGui.QGridLayout()
for y in range(13):
for x in range(9):
currentQCheckBox = QtGui.QCheckBox('%d, %d' % (x, y))
currentQCheckBox.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum))
checkBoxQGridLayout.addWidget(currentQCheckBox, x, y)
buttonQHBoxLayout = QtGui.QHBoxLayout()
applyQPushButton = QtGui.QPushButton('Apply')
closeQPushButton = QtGui.QPushButton('Close')
buttonQHBoxLayout.addWidget(applyQPushButton)
buttonQHBoxLayout.addWidget(closeQPushButton)
allQVBoxLayout = QtGui.QVBoxLayout()
allQVBoxLayout.insertLayout(1, buttonQHBoxLayout)
allQVBoxLayout.insertLayout(0, checkBoxQGridLayout)
self.setLayout(allQVBoxLayout)
myQApplication = QtGui.QApplication(sys.argv)
myQQCheckerDialog = QCheckerDialog()
myQQCheckerDialog.show()
sys.exit(myQApplication.exec_())
另见:
好啊解决了的。。。很抱歉给你添麻烦。。。我需要一个自我。在支票台上。并且需要执行self.setLayoutself.checkerLayout。如果您自己解决,请发布您的答案。没有回答就关闭它。谢谢。实际上我需要修改一下。仍然有一个错误。将编辑主目录以澄清。错误?“self.setLayoutcheckerLayout并不能解决您的问题,或者您还有更多的问题?好吧,它显示了两种布局都是正确的。但是如上所述。。。。HBoxLayout位于GridLayout的顶部,而不是下方。GridLayout的大小并不控制整个布局的大小,我希望它这样做!
import sys
from PyQt4 import QtGui
class QCheckerDialog (QtGui.QDialog):
def __init__ (self, parent = None) :
super(QCheckerDialog, self).__init__(parent)
checkBoxQGridLayout = QtGui.QGridLayout()
for y in range(13):
for x in range(9):
currentQCheckBox = QtGui.QCheckBox('%d, %d' % (x, y))
currentQCheckBox.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum))
checkBoxQGridLayout.addWidget(currentQCheckBox, x, y)
buttonQHBoxLayout = QtGui.QHBoxLayout()
applyQPushButton = QtGui.QPushButton('Apply')
closeQPushButton = QtGui.QPushButton('Close')
buttonQHBoxLayout.addWidget(applyQPushButton)
buttonQHBoxLayout.addWidget(closeQPushButton)
allQVBoxLayout = QtGui.QVBoxLayout()
allQVBoxLayout.insertLayout(1, buttonQHBoxLayout)
allQVBoxLayout.insertLayout(0, checkBoxQGridLayout)
self.setLayout(allQVBoxLayout)
myQApplication = QtGui.QApplication(sys.argv)
myQQCheckerDialog = QCheckerDialog()
myQQCheckerDialog.show()
sys.exit(myQApplication.exec_())