当从组合框发出信号时将布局插入 QDialog
Inserting layout into QDialog when signal is emitted from combobox
我在 qtdesigner 中创建了一个 ui,如下所示:
我想在标题为 "Equation" 的组框和包含标题为 "Subscripts" 和 "Connected Elements" 的两个组框的布局之间插入另一个包含几个小部件的布局。
我不确定如何插入这个附加布局的原因是,当我在 qtdesigner 中查看 object 检查器时,我看到了这个:
它没有告诉我包含对话框中所有其他小部件和布局的垂直布局的名称 window。
我正在加载 ui 如下:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import uic
class EquationEditor(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi('equation_editor.ui', self)
# Insert a layout containing a couple of widgets on index change of
# the combobox
self.typeBox.currentIndexChanged.connect(self.enableInitialValueEntry)
def enableInitialValueEntry(self):
vartype = self.typeBox.currentText()
if vartype == "Stock":
hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(QLabel("Initial Value"))
hbox.addWidget(QLineEdit())
#How can I insert the layout `hbox`?
包含所有其他布局的布局将成为对话框的布局,因此您可以尝试这样的操作:
def enableInitialValueEntry(self):
...
if vartype == "Stock":
...
main_layout = self.layout()
main_layout.insertLayout(2, hbox)
我在 qtdesigner 中创建了一个 ui,如下所示:
我想在标题为 "Equation" 的组框和包含标题为 "Subscripts" 和 "Connected Elements" 的两个组框的布局之间插入另一个包含几个小部件的布局。
我不确定如何插入这个附加布局的原因是,当我在 qtdesigner 中查看 object 检查器时,我看到了这个:
它没有告诉我包含对话框中所有其他小部件和布局的垂直布局的名称 window。
我正在加载 ui 如下:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import uic
class EquationEditor(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi('equation_editor.ui', self)
# Insert a layout containing a couple of widgets on index change of
# the combobox
self.typeBox.currentIndexChanged.connect(self.enableInitialValueEntry)
def enableInitialValueEntry(self):
vartype = self.typeBox.currentText()
if vartype == "Stock":
hbox = QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(QLabel("Initial Value"))
hbox.addWidget(QLineEdit())
#How can I insert the layout `hbox`?
包含所有其他布局的布局将成为对话框的布局,因此您可以尝试这样的操作:
def enableInitialValueEntry(self):
...
if vartype == "Stock":
...
main_layout = self.layout()
main_layout.insertLayout(2, hbox)