在运行时将小部件添加到嵌套布局
adding widgets to nested layouts at runtime
我一直在尝试制作一个小的 pyqt 脚本,在按下按钮时添加按钮。它按预期工作,但仅在向主布局添加按钮时有效。当我尝试将按钮添加到嵌套布局时,它们没有显示。
工作代码示例:
class Example(QWidget):
def __init__(self):
super().__init__()
self.widget_layout = QVBoxLayout()
self.btn = QPushButton('add button')
self.btn.pressed.connect(self.add_button)
self.widget_layout.addWidget(self.btn)
self.setLayout(self.widget_layout)
self.setGeometry(300, 300, 300, 300)
self.show()
def add_button(self):
count = self.widget_layout.count()
btn = QPushButton(str(count))
self.widget_layout.addWidget(btn)
无效的代码示例:
class Example(QWidget):
def __init__(self):
super().__init__()
self.widget_layout = QVBoxLayout()
self.button_layout = QVBoxLayout()
self.btn = QPushButton('add button')
self.btn.pressed.connect(self.add_button)
self.widget_layout.addWidget(self.btn)
self.widget_layout.addItem(self.button_layout)
self.setLayout(self.widget_layout)
self.setGeometry(300, 300, 300, 300)
self.show()
def add_button(self):
count = self.button_layout.count()
btn = QPushButton(str(count+1))
self.button_layout.addWidget(btn)
有谁知道为什么这在嵌套布局中不起作用?
如果您想将一个布局添加到另一个布局,那么您必须使用 addLayout() 方法,而不是您的代码失败,因为您使用了需要 QLayoutItem 的 addItem()。
解决办法是把addItem()改成addLayout():
self.widget_layout.addWidget(self.btn)
<b>self.widget_layout.addLayout(self.button_layout)</b>
self.setLayout(self.widget_layout)
我一直在尝试制作一个小的 pyqt 脚本,在按下按钮时添加按钮。它按预期工作,但仅在向主布局添加按钮时有效。当我尝试将按钮添加到嵌套布局时,它们没有显示。
工作代码示例:
class Example(QWidget):
def __init__(self):
super().__init__()
self.widget_layout = QVBoxLayout()
self.btn = QPushButton('add button')
self.btn.pressed.connect(self.add_button)
self.widget_layout.addWidget(self.btn)
self.setLayout(self.widget_layout)
self.setGeometry(300, 300, 300, 300)
self.show()
def add_button(self):
count = self.widget_layout.count()
btn = QPushButton(str(count))
self.widget_layout.addWidget(btn)
无效的代码示例:
class Example(QWidget):
def __init__(self):
super().__init__()
self.widget_layout = QVBoxLayout()
self.button_layout = QVBoxLayout()
self.btn = QPushButton('add button')
self.btn.pressed.connect(self.add_button)
self.widget_layout.addWidget(self.btn)
self.widget_layout.addItem(self.button_layout)
self.setLayout(self.widget_layout)
self.setGeometry(300, 300, 300, 300)
self.show()
def add_button(self):
count = self.button_layout.count()
btn = QPushButton(str(count+1))
self.button_layout.addWidget(btn)
有谁知道为什么这在嵌套布局中不起作用?
如果您想将一个布局添加到另一个布局,那么您必须使用 addLayout() 方法,而不是您的代码失败,因为您使用了需要 QLayoutItem 的 addItem()。
解决办法是把addItem()改成addLayout():
self.widget_layout.addWidget(self.btn)
<b>self.widget_layout.addLayout(self.button_layout)</b>
self.setLayout(self.widget_layout)