1

我正在为我的 PySide 应用程序创建一个简单的对话框。在此对话框中,用户必须填写多个输入。与这些输入相关的是标签左侧的标签。现在我创建标签,使用单独的类输入对:

class inputLayout(PyGui.QHBoxLayout):
    def __init__(self, Label, parent):
        super(inputLayout, self).__init__()

        label = PyGui.QLabel()
        label.setText(Label)
        self.addWidget(label)

        self.__input = PyGui.QTextEdit()
        self.addWidget(self.__input)

        parent.addLayout(self)

然后将其添加到主布局中,如下所示:

layout = PyGui.QVBoxLayout()

self.amp = inputLayout('Amplitude', layout)
self.test = inputLayout('test', layout)
self.test2 = inputLayout('test2', layout)

问题是,当 PySide 自动执行时,它会得到如下内容:

哦,不!

就像我的形象所暗示的那样,我宁愿让标签占据 1/3(或我选择的其他比例)以使其看起来更统一。如何使用这种比例或比例来调整布局大小?


知道这个问题,但是我不想静态设置标签的大小,而是使用比率动态设置。

4

1 回答 1

1

这是一个应该可以解决您的问题的小示例。关键在于两部分:

  1. 使用 a QGridLayout,它将列宽设置为其列中最宽的小部件的宽度(除非另有定义)。这确保了一切都沿着垂直轴很好地对齐。

  2. 设置拉伸因子。这决定了元素在调整其父元素大小时应如何调整大小。默认为 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.labelsself.text_edits创建一个字典,将标签映射到text_edit.

results = {}
for label, text_edit in zip(self.labels, self.text_edits):
    results[label] = text_edit.text()
于 2013-08-05T22:59:04.163 回答