PyQt5 - 使网格中的标签动态展开,而不会覆盖其他项目

时间:2017-07-06 14:13:00

标签: python-3.x pyqt5

我在一个窗口中有一个QGridLayout实例,我动态地添加了一系列小部件,具体取决于在另一个QListView实例上检查的值。

对于列表中的每个已检查项目,我在布局的一行上添加一个滑块和两个标签(用于值和名称),位置为0,1,2。

    for index in range(self.model.rowCount()):
        if self.model.item(index).checkState():
            slid = QSlider(Qt.Horizontal)
            sl_val_lbl = QLabel("--")
            sl_val_lbl.setMaximumWidth(150) #(a)
            #sl_val_lbl.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) #(b)
            sl_name_lbl = QLabel(self.model.item(index).text())
            #sl_name_lbl.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
            self.sliders.addWidget(slid,index,0)
            slid.setMaximumWidth(200)
            self.sliders.addWidget(sl_val_lbl,index,1)
            self.sliders.addWidget(sl_name_lbl,index,2)
            self.sliders_dict[sl_name_lbl.text()] = (slid,sl_val_lbl,sl_name_lbl)

现在,我遇到的问题是标签中的一些values实际上是非常长的字符串。 我的第一个解决方案是(a),即为标签设置一定的大小。当然,根据要渲染的文本的实际大小,这可能会也可能不会起作用,并且当所述文本只有很少的字符时,就像浮点数一样,这不是一个非常干净的解决方案。

然后我继续尝试(b),即将Qlabel的扩展政策设置为Expanding。这适用于标签本身,但它与布局(第2列)中的下一个Qlabel重叠,覆盖其值。

换句话说,我期望底层布局结构可以使用包含的窗口小部件进行扩展,但这种情况并没有发生。

如何获得让布局中的列大小跟随/适应所包含小部件的列所需的效果?

0 个答案:

没有答案