为什么当我更改我的选择时,我的窗口布局会改变



如果你在这里看我的两张图片,你会注意到在两个选择之间切换会改变右侧QListWidget的大小。

我用QGridLayout布置了它。以下是相关的代码片段,pn_list是相关的小部件,但您可以在此处查看完整的代码:

def initUI(self):
    # Layouts
    grid = QtGui.QGridLayout()
    ov_main = QtGui.QHBoxLayout()
    ov_col1 = QtGui.QFormLayout()
    ov_col2 = QtGui.QVBoxLayout()
    ov_custs = QtGui.QFormLayout()

    # Main window widgets
    self.pn_input = QtGui.QLineEdit()
    overviewBox = QtGui.QGroupBox('Overview')
    self.pn_list = MyListWidget()
    # Main window layout
    grid.addWidget(QtGui.QLabel('Part Number'), 1, 1)
    grid.addWidget(self.pn_input, 1, 2)
    grid.addWidget(overviewBox, 2, 1, 1, 2)
    grid.addWidget(self.pn_list, 1, 3, 2, 1)

更新:另外,作为后续问题,我该怎么做才能防止这种情况发生?最后,我希望当行长度超过预定字符限制时,"描述"字段换行 - 我目前让我的演示者在超过此长度时截断"描述"。如何让QLabel在给定的字符宽度下换行?

通了。在MyListWidget(延伸QListWidget)上,我覆盖了sizeHint方法以返回我希望我的小部件为的宽度(以像素为单位):

class MyListWidget(QtGui.QListWidget):
    def sizeHint(self):
        hint = QtCore.QSize()
        hint.setWidth(120)
        return hint

然后,在我的initUI方法中,我在#Main window layout部分添加了一行:

# Main window layout
grid.addWidget(QtGui.QLabel('Part Number'), 1, 1)
grid.addWidget(self.pn_input, 1, 2)
grid.addWidget(overviewBox, 2, 1, 1, 2)
grid.addWidget(self.pn_list, 1, 3, 2, 1)

这使右侧的小部件保持恒定宽度,但是我仍然遇到不同长度描述的问题,使事情变得混乱。我在initUI方法中添加了以下行,以类似地处理小部件QLabel描述,现在一切都很好:

myQLabel.sizeHint = lambda: QtCore.QSize(150, -1)
myQLabel.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
myQLabel.setWordWrap(True)

lambda 语句本质上是实现我对QListWidget所做的事情的更快方法。在QListWidget的情况下,我已经重新实现了该类以添加自定义信号,因此我在那里添加了sizeHint代码。

最新更新