这是一个应该可以解决您的问题的小示例。关键在于两部分:
使用 a QGridLayout
,它将列宽设置为其列中最宽的小部件的宽度(除非另有定义)。这确保了一切都沿着垂直轴很好地对齐。
设置拉伸因子。这决定了元素在调整其父元素大小时应如何调整大小。默认为 0,所以你不必设置它,我只是为了说明的目的添加了它。通过将 text_edit 的列设置为 1,它将开始拉伸。通过使用这些因素,您可以使一列比另一列增长得更快。
from PySide import QtGui
import sys
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.input_widget = InputWidget(self)
self.layout = QtGui.QVBoxLayout()
self.layout.addWidget(self.input_widget)
self.setLayout(self.layout)
self.setCentralWidget(self.input_widget)
class InputWidget(QtGui.QWidget):
def __init__(self, parent):
super(InputWidget, self).__init__(parent)
self.grid_layout = QtGui.QGridLayout()
self.labels = ["amp", "more text", "blabla"]
self.text_edits = []
self.qlabels = []
for row, label in enumerate(self.labels):
label = QtGui.QLabel(label)
self.qlabels.append(label)
self.grid_layout.addWidget(label, row, 0)
text_edit = QtGui.QTextEdit()
self.text_edits.append(text_edit)
self.grid_layout.addWidget(text_edit, row, 1)
self.grid_layout.setColumnStretch(0, 0)
self.grid_layout.setColumnStretch(1, 2)
self.setLayout(self.grid_layout)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
如果您想从 中访问文本text_edit
,您可以在其中搜索标签的索引,self.labels
然后使用该标签self.text_edits
来检索相应的text_edit
. 或者,一旦您关闭对话框,您可以遍历两者self.labels
并self.text_edits
创建一个字典,将标签映射到text_edit
.
results = {}
for label, text_edit in zip(self.labels, self.text_edits):
results[label] = text_edit.text()